Django在后台运行长sql进程

Django在后台运行长sql进程,django,Django,我有一个网页,当用户点击某个按钮时,我需要运行一个很长的sql过程(最多20分钟左右)。脚本将运行,但用户无法继续浏览网站的其余部分 我希望这样,当点击按钮时,它进入一个在后台运行的队列 我已经查看了django后台任务,但问题是,如果不运行python manage.py process\u tasks,似乎无法启动排队的任务 我听说过芹菜,但我用的是Windows系统,它似乎不合适 我是django和网站基础设施的新手,不确定这是否可行。我在以前的回复中也看到,线程包可以实现这一点,但我不确

我有一个网页,当用户点击某个按钮时,我需要运行一个很长的sql过程(最多20分钟左右)。脚本将运行,但用户无法继续浏览网站的其余部分

我希望这样,当点击按钮时,它进入一个在后台运行的队列

我已经查看了django后台任务,但问题是,如果不运行
python manage.py process\u tasks
,似乎无法启动排队的任务

我听说过芹菜,但我用的是Windows系统,它似乎不合适


我是django和网站基础设施的新手,不确定这是否可行。我在以前的回复中也看到,线程包可以实现这一点,但我不确定它是否过时。

您可以使用Asyncio提供的create_任务,它可以为您运行后台任务,而不会阻塞客户端的视图

Python 3.7+

免责声明:我不太确定myfunc()是否需要异步,除非您正在执行一项有意义的异步任务

在myfunc()中还可以有一个while循环,用于定期重复操作

import asyncio

async def myfunc():
    await asyncio.sleep(5)
    print("Hi, after 5 seconds.")

task = asyncio.create_task(myfunc(), )

我不明白运行process_tasks有什么问题。要添加到上面的评论中,对于大多数常见的后台作业框架,您需要启动一个单独的流程,与常规Web服务器一起运行。您不需要调用
python manage.py process\u tasks
每次您想要运行一个任务时,都需要调用它一次,然后让该进程与您的Web服务器进程一起运行。我使用芹菜并运行Windows 10。完全可行。我还使用Docker,这使得跨平台开发更加容易。