代码之家  ›  专栏  ›  技术社区  ›  sheats

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

  •  38
  • sheats  · 技术社区  · 17 年前

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

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

    if job == 1:
        run script in background: /path/to/script.py
        return 'Job is running'
    
    4 回复  |  直到 15 年前
        1
  •  63
  •   nosklo    17 年前
    p = subprocess.Popen([sys.executable, '/path/to/script.py'], 
                                        stdout=subprocess.PIPE, 
                                        stderr=subprocess.STDOUT)
    

    这将在后台启动子流程。您的脚本将保持正常运行。

    here

        2
  •  6
  •   user89069 user89069    17 年前

    如果您正在考虑长期扩展,那么在消息队列中运行它肯定是一种方法。向在后台不断运行的队列发送消息,并编写作业处理程序来处理不同种类的消息。

    既然你用的是Django,我想 Beanstalkd 非常适合。 Here's 关于这个主题的一个很好的教程。文章中的第一条评论也有一些好的提示。

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

        3
  •  3
  •   Aaron Maenpaa    17 年前

    Popen确实是您想要的。

        4
  •  1
  •   Sean Cavanagh    17 年前

    但很可能这些对您的应用程序来说太重了。