首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带Django的Asyncio

带Django的Asyncio
EN

Stack Overflow用户
提问于 2017-01-11 23:07:32
回答 2查看 7.1K关注 0票数 7

我尝试在我的Django后处理中使用asyncio,如下所示:

代码语言:javascript
复制
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()

但是我只是在执行的时候得到了一个错误:

代码语言:javascript
复制
loop = asyncio.get_event_loop()

RuntimeError: There is no current event loop in thread 'Thread-17'.

有什么想法吗?

提前谢谢你

EN

回答 2

Stack Overflow用户

发布于 2017-09-10 19:15:17

你的原始代码将无法工作,因为get_event_loop()方法只是get_event_loop_policy().get_event_loop()的快捷方式,它只为主线程自动创建和返回事件循环。要使其正常工作,您需要显式地为每个当前线程上下文创建和设置新的事件循环:

代码语言:javascript
复制
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()

你可以在here上阅读更多关于这个东西的内容。

票数 6
EN

Stack Overflow用户

发布于 2017-01-12 00:06:44

看起来,如果我这样做,它是有效的:

代码语言:javascript
复制
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()

我希望它是稳定的,并且在UNIX中也能像在Windows中一样工作得很好

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41594266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档