ver*_*o71 7 python django multithreading loops python-asyncio
我正在尝试在我的 Django 后处理中使用 asyncio,例如:
query : # a query to my model
tasks = []
for record in query:
tasks.append(do_something_with_google_calendar(record))
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
Run Code Online (Sandbox Code Playgroud)
但我只是在执行时遇到错误:
loop = asyncio.get_event_loop()
RuntimeError: There is no current event loop in thread 'Thread-17'.
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
先感谢您
您的原始代码不起作用,因为 get_event_loop() 方法只是 get_event_loop_policy().get_event_loop() 的快捷方式,它仅为主线程自动创建和返回事件循环。为了使其正常工作,您需要为每个当前线程上下文显式创建和设置新的事件循环:
query : # a query to my model
tasks = []
for record in query:
tasks.append(do_something_with_google_calendar(record))
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关此内容的更多信息。
看来如果我这样做,它会起作用:
query : # a query to my model
tasks = []
for record in query:
tasks.append(do_something_with_google_calendar(record))
loop = asyncio.SelectorEventLoop()
asyncio.set_event_loop(loop)
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
Run Code Online (Sandbox Code Playgroud)
我希望它很稳定,并且在 UNIX 中也能像在 Windows 中一样正常工作
| 归档时间: |
|
| 查看次数: |
6960 次 |
| 最近记录: |