Toriyung

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

threading多线程使用

当我们调用某段代码时需要等待一段时间后才能进行后续的操作,而这期间计算资源并未占满,这就浪费了CPU的资源和时间,此时可以采用多线程进行并行计算。

如当我们使用爬虫爬取网络资源时,某个资源的爬取过程由于网络因素需要等待,而后续的资源清洗和整合等需要等待,此时可以将资源分多份同时进行爬取,等全部爬取完后进行后续操作,这就可以利用多线程技术。

关键词:CPU未占满,阻塞

 

python3自带threading库

使用如下

  使用threading为父类定义类

复制代码
class ShareThread(threading.Thread):
    def __init__(self, threadID):
        threading.Thread.__init__(self)
        self.threadID = threadID
    
    def run(self):
        myfunc()
        pass
        
    def myfunc(self):
        pass
复制代码

 

  创建对象,调用,添加阻塞

复制代码
#创建对象,参数为线程ID
share_1 = ShareThread('thread_1')
share_2 = ShareThread('thread_2')

#开始子线程,即运行self.run函数
share_1.start()
share_2.start()

#添加线程进阻塞状态,在该线程完成之前不运行主线程
share_1.join()
share_2.join()
复制代码

 

关于阻塞:

  有些程序子线程未结束则进入主线程会导致数据错乱等操作,需要等待子线程结束再开始下面的操作,此时需要添加join进入阻塞队列,注意的是,多个子线程之间如果第二个线程start之前先调用了第一个线程的join,则会导致该线程start不了,直到第一个线程阻塞结束,所以需要根据项目需求合理安排start和join先后位置

posted on   Toriyung  阅读(23)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示