当前位置:  开发笔记 > 编程语言 > 正文

如何在Python中运行另一个脚本而不等待它完成?

如何解决《如何在Python中运行另一个脚本而不等待它完成?》经验,为你挑选了2个好方法。

我正在为用户创建一个小仪表板,以便他能够运行特定的工作.我正在使用Django所以我希望他能够单击一个链接来启动作业,然后将页面返回给他,并显示作业正在运行的消息.该工作的结果将在稍后通过电子邮件发送给他.

我相信我应该使用,subprocess.Popen但我不确定.所以在伪代码中,这就是我想要做的:

if job == 1:
    run script in background: /path/to/script.py
    return 'Job is running'

nosklo.. 61

p = subprocess.Popen([sys.executable, '/path/to/script.py'], 
                                    stdout=subprocess.PIPE, 
                                    stderr=subprocess.STDOUT)

这将在后台启动子进程.您的脚本将继续正常运行.

阅读此处的文档.



1> nosklo..:
p = subprocess.Popen([sys.executable, '/path/to/script.py'], 
                                    stdout=subprocess.PIPE, 
                                    stderr=subprocess.STDOUT)

这将在后台启动子进程.您的脚本将继续正常运行.

阅读此处的文档.


列表中的其他元素作为第一个参数传递.链接的文档很有用,并且由于某种原因而链接.

2> 小智..:

如果您正在考虑长期扩展,那么通过消息队列运行它绝对是可行的方法.将消息发送到后台不断运行的队列,并编写作业处理程序来处理不同类型的消息.

既然你正在使用Django,我认为Beanstalkd非常合适.这是一个关于这个主题的非常好的教程.该文章中的第一条评论也有一些很好的提示.

就个人而言,我已经推出了一个用Erlang编写的自定义内存中队列服务器,其中的Python绑定用C语言编写.但redis看起来可能会成为未来排队/消息传递需求的有力竞争者.希望这可以帮助!


芹菜(http://pypi.python.org/pypi/celery)也是一个很好的匹配.它使用RabbitMQ(对于消息持久性,如果有人有时间,则可以使用beanstalkd后端来获取胡萝卜)beanstalkd教程只解决其中一个问题,发送消息,但实际上执行任务作为读者的练习.
推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有