2016-12-21 115 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