asyncio.get_event_loop()から取得したループでloop.close()を呼び出した後、Python3.6.1で新しいループを作成できますか?Python3.6.1でloop.close asyncio.get_event_loopを呼び出した後に新しいイベントループを作成できません
私は、ループを適切に閉じるための回答と、task.cancel()の使用方法を見てきましたが、新しいループを起こすような方法でこれらの例を使用することはできませんでした最初の閉じた後に作成されます。私は明示的にexecutorを設定し、後でexecutor.shutdown(wait = True)を呼び出そうとしましたが、それは役に立ちませんでした。私はまた、 'デルループ'と他のものの束delを試みた。
ドキュメンテーションは、イベントループを閉じることが冪等であり、元に戻すことができないことを示しています。新しいループを作成できないということも意味しますか?ここで
は、問題を実証するためのいくつかの簡単なサンプルコードです: ``
#!/usr/bin/env python3.6
'''
To demonstrate an issue, the following code was adapted from:
https://docs.python.org/3/library/asyncio-eventloop.html
'''
import asyncio
def hello_world(loop):
print('Hello World')
loop.stop()
loop = asyncio.get_event_loop()
loop.call_soon(hello_world, loop)
loop.run_forever()
# loop.close()
'''
If the commented out loop.close() above is uncommented,
the following code will fail with:
Traceback (most recent call last):
File "./aquestion.py", line 28, in <module>
loopNew.call_soon(hello_world, loopNew)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib /python3.6/asyncio/base_events.py", line 573, in call_soon
self._check_closed()
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/asyncio/base_events.py", line 357, in _check_closed
raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
'''
loopNew = asyncio.get_event_loop()
loopNew.call_soon(hello_world, loopNew)
loopNew.run_forever()
私の質問に答えるために、任意の試みがいただければ幸いです。
また、イベントループを作成し、さまざまな目的に使用し、長時間実行しているプログラムが終了しようとしているときにそのループを閉じるのは悪いフォームですか?これは間違っているようです。
ありがとうございます!それは素晴らしい仕事でした。 私は以前にnew_event_loopを試しましたが、その実験中に何か間違ったことをしたに違いありません。 –
私は 'set_event_loop'について言及しませんでした。それは、あなたが遭遇した問題に関連している可能性があります。私はそれを含める答えを更新しました。 – dirn