タスクは破棄されましたが、リクエストごとに保留中です

Aug 22 2020

リクエストごとに新しいループを開始していますが、手動でサービスを強制終了すると、以下のエラーが発生します。

ERROR:asyncio:Task was destroyed but it is pending!
task: <Task pending name='Task-192' coro=<AsyncioContextBase._run() running at C:\ProgramData\Anaconda3\lib\site-packages\caio\asyncio_base.py:54> wait_for=<Future cancelled>>

これが私のコードです:

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
c = doSomething( maxtasks=100)
loop.run_until_complete(c.run())
try:
loop.stop()
loop.close()
print('done:')
except RuntimeError:
print('errr:')  

また、以下のコードを使用してループを閉じる前に保留中のすべてのタスクを取得しようとしました。これにより、閉じる前にすべてのタスクを閉じることができますが、「RuntimeError:実行中のイベントループがありません」というメッセージが表示されます。

pending = asyncio.all_tasks()

ループが終了した後、これらすべてのタスクを強制終了する方法を誰かに教えてもらえますか?これらのループをバックグラウンドで実行してメモリ全体を取得したくない

回答

eirirlar Aug 22 2020 at 17:12

doSomething()でcaioを使用していると仮定します。これはcaioで私のために働いた:

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
context = caio.AsyncioContext(16, loop=loop)
loop.run_until_complete(main(context))
context.close()