
在我的 多进程 multiprocessingProcess 有同学留言 如何获取 子进程处理的结果 。这里开一篇博客讲解。
其实这里涉及到 同步 与 异步 的概念。对于多线程/进程 而言,它们其实是一种 异步 *** 作。
对于异步 *** 作,分为 不需要获取异步结果 与 需要获取异步结果 ,我们应该尽量设计成第一种方式。
对于大部分的 多线程/进程 | 异步 *** 作 [ 后面统称为异步 *** 作 ],我们应尽量在 异步 *** 作 中完成所有任务,这是可以通过设计控制的。
举例几个场景:
2)多个 线程/进程 | 异步 有关联的 *** 作。
多线程 / 进程有一个经典的入门案例:生产者与消费者模式。
按照同步的思想,应该是[ 在主控程序中 ]通过生产者获取数据,然后调用消费者去消耗数据。
但是在 多线程 |进程 中,我们应该在子线程中完成任务。所以应该这样设计:
在 生产者 与 消费者 中分别传入一个容器,他们分别在容器中 put , get 数据
小结,对于大部分的 IO *** 作,使用 多线程/进程 可以大大的减少程序执行时间,在设计 多线程/进程 时,我们应尽量将任务在 子线程/进程 中完成。
作为一个成熟的子线程/进程,你应该能够独立完成工作。包含数据处理,存储,异常等待。
一个子线程处理的任务量可大可小。我们可以通过一个子线程发送邮件,对服务器而言,可以通过一个子线程去处理用户请求,我们后端的所以 *** 作都是在这个子线程中完成。
虽然上面讲了很多的不需要获取异步结果的案例。当我们也有很多必须要获取异步结果的场景。
比如我们将一个很大的计算分成多个小计算,然后对这些小计算的结果汇总。
比如做大文件上传,将大文件拆分成小文件,并获取上传成功的小文件标示
对于需要获取异步结果场景, python 有单独的 多线程/进程执行器 ,分别是
ProcessPoolExecutor , ThreadPoolExecutor
python 的GIL规定每个时刻只能有一个线程访问python虚拟机,所以你要用python的多线程来做计算是很不合算的,但是对于IO密集型的应用,例如网络交互来说,python的多线程还是非常给力的。
如果你是一个计算密集型的任务,非要用python来并行执行的话,有以下几个方法:
1 使用python的multiprocessing 模块,能够发挥多核的优势。
2 使用ironPython,但是这个只能在windows下用
3 使用pypy,这个可以实现真正的多线程。
线程也就是轻量级的进程,多线程允许一次执行多个线程,Python是多线程语言,它有一个多线程包,GIL也就是全局解释器锁,以确保一次执行单个线程,一个线程保存GIL并在将其传递给下一个线程之前执行一些 *** 作,也就产生了并行执行的错觉。
以上就是关于获取 异步执行调用的结果全部的内容,包括:获取 异步执行调用的结果、Python 的多线程问题。。、python 怎么实现多线程的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)