【问题标题】:Running program/function in background in Python在 Python 中后台运行程序/函数
【发布时间】:2016-01-13 09:40:36
【问题描述】:

我正在尝试从另一个 python 程序运行一个程序/函数(只要可能),它将启动并关闭。 例子。 python脚本“parent.py”将被调用一些输入,输入数据将被传递给函数/程序“child”,这大约需要30分钟才能完成。 parent.py 应该在调用“child”后关闭。

有什么办法吗?

现在我可以启动孩子,但只有在孩子完成后才会关闭父母。其中,我想避免。

【问题讨论】:

  • 你看过subprocess module吗?
  • 是的,同样的问题,它也会等待子进程完成,然后终止主程序。
  • 有一些选项可以让子进程像那样等待,但您不必设置这些选项。例如,请参阅我的答案。

标签: python multithreading multiprocessing multitasking


【解决方案1】:

将任何程序作为后台进程运行。这是最简单的解决方案,而且效果很好!

import thread

def yourFunction(param):
    print "yourFunction was called"

    thread.start_new_thread(yourFunction, (param))

【讨论】:

    【解决方案2】:

    据我了解,您的目标是在子进程中启动后台进程,但不要让主程序等待它完成。这是一个执行此操作的示例程序:

    $ cat script.py
    import subprocess
    subprocess.Popen("sleep 3; echo 'Done!';", shell=True)
    

    以下是该程序的运行示例:

    $ python script.py
    $ 
    $ 
    $ Done!
    

    如你所见,python退出后shell脚本继续运行。

    subprocess 有很多选项,您需要根据需要自定义子流程调用。

    在某些情况下,在其父进程退出后仍然存在的子进程可能会离开僵尸进程。有关如何避免这种情况的说明,请参阅here

    替代方案:让子进程等待

    如果您希望 python 等待子进程完成时发生相反的情况,请查看此程序:

    $ cat script.py
    import subprocess
    p = subprocess.Popen("sleep 3; echo 'Done!';", shell=True)
    p.wait()
    

    这是它的输出示例:

    $ python script.py
    Done!
    $ 
    $ 
    

    如您所见,因为我们调用了wait,python 一直等到子进程完成才退出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      相关资源
      最近更新 更多