gpt4 book ai didi

python - 在 django View 中使用 subprocess.Popen() 执行 python 脚本

转载 作者:太空狗 更新时间:2023-10-30 01:10:30 25 4
gpt4 key购买 nike

我环顾四周,但似乎无法解决我遇到的这个问题。我想在我的 django 应用程序 View 中执行一个 python 脚本。我已将要执行的代码放在 django 管理命令中,以便可以通过命令行 python manage.py command-name 访问它。然后,我尝试使用 subprocess.Popen("python manage.py command-name",shell=True) 运行此命令。

但是,执行此命令可能需要一些时间,因此我希望 View 继续并允许脚本在后台执行。单独使用 subprocess.Popen 似乎会导致 View 挂起,直到脚本完成,所以我尝试使用线程(遵循 another SA 问题):

class SubprocessThread(threading.Thread):
def __init__(self, c):
self.command = c
self.stdout = None
self.stderr = None
threading.Thread.__init__(self)

def run(self):
p = subprocess.Popen(self.command,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)

self.stdout, self.stderr = p.communicate()

然后执行:

t = SubprocessThread("python manage.py command-name")
t.setDaemon(True)
t.start()
t.join()

但是, View 仍然挂起:光标有一个繁忙的符号并且页面上的 AJAX 没有加载。否则,页面的 html 似乎加载正常,并且线程调用似乎正常完成后 View 中的命令(在脚本完成之前)。有人可以帮帮我吗?我希望脚本能够执行并执行自己的操作,而无需在页面上阻止 View 或 AJAX 调用。

最佳答案

也许你应该使用 celery

Celery is a task queue/job queue based on distributed message passing. It is focused on real-time operation

关于python - 在 django View 中使用 subprocess.Popen() 执行 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3144162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com