【发布时间】:2018-03-17 12:03:17
【问题描述】:
我正在使用一个执行 asyncio 函数的模块来通过抓取获取 cmets,该代码在 Python 脚本中完美运行,但 Django 似乎没有执行 Asyncio 代码。我收到一个错误提示
线程 'Thread-3' 中没有当前事件循环。
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 进行一些脏线程工作,我能够执行循环,但只能执行一次。
【问题讨论】:
-
去掉关闭循环的代码,应该就没事了。
-
@user4815162342 试过了。没有任何改变。
-
尝试使用
loop = asyncio.new_event_loop(); asyncio.set_event_loop(loop)创建一个新循环 -
成功了,谢谢!
标签: python django python-asyncio