Python concurrent
介绍
为什么需要concurent
线程和进程间的区别和使用场景下一篇会介绍到,本篇只接受多线程和多进程再Python中的应用
concurent是比起threading更加底层的库,比起Python提供的 threading有几个好处
- 可以通过主线程调度子线程,获得子线程状态以及结果
- concurent中多线程和多进程接口一致,切换起来非常平滑
实际使用
多线程编程
如何调用
注意,executor.submit()
是非阻塞的,调用后主线程会继续运行,所以下面的代码会先打印False
,随后两个线程运行完毕了再打印结果
task1.done()
判断是否结束,非阻塞
task1.result()
获取返回结果,阻塞式
task2.cancel()
取消任务,如果取消成功会返回True,否则返回False,线程只能在运行之前取消,运行开始或结束后取消都会失败
from concurrent import futures
from concurrent.futures import ThreadPoolExecutor
import time
#线程池
def doThings(takeTime):
time.sleep(takeTime)
print('finished!')
return takeTime
executor = ThreadPoolExecutor(max_workers=2)
#通过submit函数提交函数到线程池中
task1 = executor.submit(doThings,(3))
task2 = executor.submit(doThings,(2))
print(task1.done())
time.sleep(3)
print(task1.done())
False
finished!
finished!
True
print