此多处理,多线程或asyncio
我目前正在如何解决Python 3.5+中的这个问题。此多处理,多线程或asyncio
我的代码看起来像这样:
while True: do_process1() # run this synchronously
do_process2() # don't wait on this to go to the next iteration but need to handle its completion
而且在这种情况下,do_process2()
需要很长的时间。我想要do_process2()
异步运行,以便循环的下一次迭代不会等待do_process2()
完成。
从我正在阅读,我可以使用多线程,但与GIL我看不到我如何“卸载”do_process2()
并继续执行下一个迭代。
看来多处理在这里很合适。说到这里,我看到的很多例子都是在上等待的子流程来完成工作。我不想这样做,我想继续执行while
循环。
同样,我希望能够处理从异步调用到do_process2()
的回调,以便我可以处理该操作的完成。我发现我可以通过Pool
对象来达到apply_async()
,但这是最好的方法吗?
这里最好的办法是什么?我正在使用Python 3.5+,所以想知道asyncio适合哪里?我觉得像多线程,我不会有我正在寻找卸载和继续工作的收获。
回答:
这取决于什么也正是发生内部do_process2
,multiprocessing
是安全的选择总是(类型的一个尺寸适合的所有),因为CPython的有螺纹和GIL一些记录的问题,有一些事件驱动的解决方案,但他们中的一些具有便携性的问题(我在Windows中运行了很多的Python代码,所以便携性对我来说是一个大忌),终于有asyncio
这是一种很酷,但作为通知说
的ASYNCIO包已被列入标准库是临时的。如果核心开发人员认为需要,可能会发生向后不兼容的更改(直至并包括模块的移除)。
以上是 此多处理,多线程或asyncio 的全部内容, 来源链接: utcz.com/qa/259402.html