我正在创建一个异步函数来上传视频。目标是在后台异步运行视频上传,而不让用户等待。当视频上传时,用户将被重定向到另一个页面。
按照Python异步文档中的说明,我使用create_task(),因为这似乎是最简单的解决方案。
在下面的代码中,它可以工作,但不是异步运行。HttpResponseRedirect在视频完全上传之后才能运行。
我还插入了两行代码来检查upload_video()是否异步运行。print('before')和print('after')都是在upload_video函数完成之前打印到控制台的。但是,直到所有的代码都被执行之后,最终的HttpResponseRedirect()才会运行。
async def my_async_func(request):
if request.method == 'POST':
video = request.FILES['video']
print('before')
asyncio.create_task(upload_video(video))
print('after')
return HttpResponseRedirect(... somewhere)
async def upload_video(video):
...基本上,尽管有我编写的所有异步语法和逻辑,该函数仍然像典型的同步django视图函数一样运行。
为什么会这样呢?要使upload_video()异步运行并在不等待的情况下返回HttpResponseRedirect(),需要更改什么?
我也尝试用create_task()代替ensure_future(),但是它给了我同样的结果--视频上传,但不是异步上传。
https://stackoverflow.com/questions/73766070
复制相似问题