threading多线程使用

发布时间 2023-04-12 21:16:34作者: Toriyung

当我们调用某段代码时需要等待一段时间后才能进行后续的操作,而这期间计算资源并未占满,这就浪费了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先后位置