2015-06-02 59 views
8

在線程中,我們有一個名爲「線程上下文」的東西,我們可以在其中保存一些數據(狀態)以便在特殊線程中訪問。在asyncio中,我需要在當前執行路徑中保存一些狀態,以便所有後續的協程都可以訪問它。解決辦法是什麼? 注意:我知道每個協程函數都爲asyncio中的執行路徑實例化,但出於某種原因,我無法在函數屬性中保存狀態。 (雖然這種方法反正不是很好)Python asyncio context

+0

[This python-ideas thread](https://mail.python .org/pipermail/python-ideas/2015-April/033151.html)和[此asyncio錯誤報告](https://github.com/python/asyncio/issues/165)似乎相關。 – dano

+0

'curio'似乎有它https://github.com/dabeaz/curio/pull/85 –

回答

7

你可以看看tasklocals library。它引入了tasklocals.local,如threading.local多線程。

+0

感謝哥們!我檢查了源代碼,發現我錯過的魔法:Task.current_task() – Kamyar

+0

這段代碼是否與最近的Python版本兼容,因爲這個庫已經多年沒有更新過了? –

+0

是的,它是兼容的 –

0

還有https://github.com/azazel75/metapensiero.asyncio.tasklocal,但你必須知道的任務往往是由圖書館還通過使用ensure_future(a_coroutine)而且也跟蹤這些新的任務和初始化它們的當地人(也許這些任務沒有實際的辦法ASYNCIO內部創建的,他們從創建)。 (一個「黑客」來對子級設置loop.set_task_factory()功能的東西,沒有工作,希望所有的代碼使用loop.create_task()創建任務,這並非總是如此...)

的另一個問題是,如果你的一些代碼在未來回調Task.current_task()函數中執行,這兩個函數庫都使用這兩個函數庫來選擇正確的本地服務副本將始終返回None ...