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先后位置
标签:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通