Python 线程池模块之多线程操作代码
作者:简简单单OnlineZuozuo
最近在做一个爬虫相关的项目,单线程的整站爬虫,耗时真的不是一般的巨大,运行一次也是心累,所以,要想实现整站爬虫,多线程是不可避免的,那么python多线程又应该怎样实现呢?今天小编给大家分享下实现代码,感兴趣的朋友一起看看吧
1、线程池模块
引入
from concurrent.futures import ThreadPoolExecutor
2、使用线程池
一个简单的线程池使用案例
from concurrent.futures import ThreadPoolExecutor import time pool = ThreadPoolExecutor(10, 'Python') def fun(): time.sleep(1) print(1, end='') if __name__ == '__main__': # 列表推导式 [pool.submit(fun) for i in range(20) if True]
from concurrent.futures import ThreadPoolExecutor import time pool = ThreadPoolExecutor(10, 'Python') def fun(arg1,arg2): time.sleep(1) print(arg1, end=' ') print(arg2, end=' ') if __name__ == '__main__': # 列表推导式 [pool.submit(fun,i,i) for i in range(20) if True] # 单个线程的执行 task = pool.submit(fun,'Hello','world') # 判断任务执行状态 print(f'task status {task.done()}') time.sleep(4) print(f'task status {task.done()}') # 获取结果的函数是阻塞的,所以他会等线程结束之后才会输出 print(task.result())
3、获取结果
阻塞等待
print(task.result())
批量获取结果
for future in as_completed(all_task): data = future.result()
阻塞主线程,等待执行结束再执行下一个业务
# 等待线程全部执行完毕 wait(pool.submit(fun,1,2),return_when=ALL_COMPLETED) print('')
以上就是Python 线程池模块之多线程操作代码的详细内容,更多关于Python 线程池模块的资料请关注脚本之家其它相关文章!