2016-12-21 44 views
1

我目前正在如何解决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适合哪里?我觉得像多线程,我不会有我正在寻找卸载和继续工作的收获。

回答

0

这取决于什么也正是发生内部do_process2multiprocessing是安全的选择总是(类型的一个尺寸适合的所有),因为CPython的有螺纹和GIL一些记录的问题,有一些事件驱动的解决方案,但他们中的一些具有便携性的问题(我在Windows中运行了很多的Python代码,所以便携性对我来说是一个大忌),终于有asyncio这是一种很酷,但作为通知说

的ASYNCIO包已被列入标准库是临时的。如果核心开发人员认为需要,可能会发生向后不兼容的更改(直至并包括模块的移除)。

+0

感谢您的信息!那么'asyncio'迎合Python的多线程部分吗?这只是另一种方式吗? – user7327326