首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >asyncio.create_task()不在异步视图函数中异步运行

asyncio.create_task()不在异步视图函数中异步运行
EN

Stack Overflow用户
提问于 2022-09-18 20:06:31
回答 1查看 90关注 0票数 1

我正在创建一个异步函数来上传视频。目标是在后台异步运行视频上传,而不让用户等待。当视频上传时,用户将被重定向到另一个页面。

按照Python异步文档中的说明,我使用create_task(),因为这似乎是最简单的解决方案。

在下面的代码中,它可以工作,但不是异步运行。HttpResponseRedirect在视频完全上传之后才能运行。

我还插入了两行代码来检查upload_video()是否异步运行。print('before')print('after')都是在upload_video函数完成之前打印到控制台的。但是,直到所有的代码都被执行之后,最终的HttpResponseRedirect()才会运行。

代码语言:javascript
复制
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(),但是它给了我同样的结果--视频上传,但不是异步上传。

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

https://stackoverflow.com/questions/73766070

复制
相关文章

相似问题

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