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先后位置