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/