方法一:使用threading
在threading中,并没有实现返回值的方法,我们可以用数据库或者是全局变量来实现返回值的获取。这里使用的是全局变量。
输出:
方法二:使用ThreadPoolExecutor的 submit
从Python3.2开始,标准库为我们提供了concurrent.futures
模块,它提供了ThreadPoolExecutor
和ProcessPoolExecutor
两个类,实现了对threading
和multiprocessing
的进一步抽象。这里主要关注线程池,不仅可以帮我们自动调度线程,还可以做到:
- 主线程可以获取某一个线程(或者任务的)的状态,以及返回值。
- 当一个线程完成的时候,主线程能够立即知道。
- 让多线程和多进程的编码接口一致。
as_completed()
方法是一个生成器,在没有任务完成的时候,会阻塞,在有某个任务完成的时候,会yield这个任务,就能执行for循环下面的语句,然后继续阻塞住,循环到所有的任务结束。从结果也可以看出,先完成的任务会先通知主线程
输出:
这里可以看出submit的返回是无序的
这里看下源码:
注意的是,它就是执行一个单独的函数,并且返回的是future对象(具体请看 官方文档)。
方法三:使用ThreadPoolExecutor的 map
输出:
这里看出map的输出是有序的
这里看下map的源码:
它的参数是个iterables,所以当参数为列表字典等时,只需要写一个map函数就行了,而且它的返回值也是个iterable。
以上~
作者:Elvis_zhou
链接:https://www.jianshu.com/p/d866fa68da37
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。