JupyterノートブックでPython非同期コードを実行するにはどうすればよいですか?



How Do I Run Python Asyncio Code Jupyter Notebook



解決:

2019年2月21日編集:問題が修正されました

これは、JupyterNotebookの最新バージョンでは問題ではなくなりました。 Jupyter Notebookの作成者は、ここでケースの詳細を説明しました。



以下の回答は、opによって正しいとマークされた元の応答でした。


これはかなり前に投稿されましたが、他の人がJupyterNotebook内で非同期コードを実行する問題の説明と解決策を探している場合に備えて。



JupyterのTornado5.0は、独自のasyncioイベントループを追加した後、ブリックされたasyncio機能を更新します。

get_event_loop() '> get_event_loop()'>

したがって、非同期機能をJupyterNotebookで実行するには できません を呼び出すrun_until_complete()、から受け取るループなのでasyncio.get_event_loop()がアクティブになります。



代わりに、現在のループにタスクを追加する必要があります。

import asyncio loop = asyncio.get_event_loop()loop.create_task(some_async_function())

Jupyter Notebookで実行されている簡単な例:

ここに画像の説明を入力してください


これは、最新のjupyterリリースでは問題ではなくなりました。

https://blog.jupyter.org/ipython-7-0-async-repl-a35ce050f7f7

非同期関数を記述して、jupyterセルで直接待機するだけです。

async def fn():print( 'hello')await asyncio.sleep(1)print( 'world')await fn() 

JupyterでのAsyncioでの私のああの瞬間は次のようになります:

import time、asyncio async def count():print( 'count one')await asyncio.sleep(1)print( 'count four')async def count_further():print( 'count two')await asyncio.sleep(1 )print( 'count five')async def count_even_further():print( 'count three')await asyncio.sleep(1)print( 'count six')async def main():await asyncio.gather(count()、 count_further()、count_even_further())s = time.perf_counter()await main()経過= time.perf_counter()-s print(f 'スクリプトは{elapsed:0.2f}秒で実行されました。')

出力:

カウント1カウント2カウント3カウント4カウント5カウント61.00秒で実行されるスクリプト。

もともとここからですが、最初は例が明確ではありませんでした:https://realpython.com/async-io-python/