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

Django的Asyncio
EN

Stack Overflow用户
提问于 2018-03-17 20:03:17
回答 1查看 1.6K关注 0票数 5

我正在使用一个执行异步函数的模块,通过抓取来获得注释,代码在Python脚本中工作得很好,但Django似乎不能执行asyncio代码。我收到一个错误,说

线程' thread -3‘中没有当前事件循环。

代码语言:javascript
复制
def comments(request):
    if request.method == 'POST':
        async def main():
            q = Query('Donald Trump', limit=20)
            async for tw in q.get_comments():
                print(tw)
        loop = asyncio.get_event_loop()
        try:
            loop.run_until_complete(main())
            loop.run_until_complete(loop.shutdown_asyncgens())
        finally:
            loop.close()
        form = CommentForm(request.POST)
        if form.is_valid():
            return HttpResponseRedirect('/index.html')
    else:
        form = CommentForm()
    return render(request, 'index.html', {'form': form})

通过在线程内部使用Asyncio进行一些肮脏的线程工作,我可以执行循环,但只能执行一次。

EN

回答 1

Stack Overflow用户

发布于 2018-03-18 03:34:48

错误消息There is no current event loop in thread 'Thread-3'.表明您正在从主线程外部访问asyncio。您可以使用set_event_loop来设置它:

代码语言:javascript
复制
def run_coro(coro):
    try:
        loop = asyncio.get_event_loop()
    except RuntimeError:
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
    return loop.run_until_complete(coro)

然后,在comments

代码语言:javascript
复制
run_coro(main())
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49335766

复制
相关文章

相似问题

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