如何在后台运行python的情况下创建独立进程

时间:2019-04-05 15:17:43

标签: python-3.x multithreading process subprocess background-process

我正在尝试创建一个独立的后台进程,该进程完全由python自行运行。是否可以创建这样的进程,即使退出python脚本后,该进程仍在后台运行。我已经使用pyinstaller创建了一个.exe文件,并且我希望该文件在后台运行而不会弹出控制台,这样除非用户倾向于经常打开其任务管理器,否则用户不会意识到该过程。

多处理模块有助于创建进程,但是在脚本执行完成后它们会终止。与线程模块相同。

即使脚本完成执行后,是否仍可以使某些特定的代码在后台运行?还是完全在后台启动整个脚本而不显示任何控制台?

我尝试使用多处理模块中的Process类和线程模块中的Thread类,但是脚本执行后的所有出口均已使用。甚至子进程和os模块也被证明没有帮助

from multiprocessing import Process
from threading import Thread

def bg_func():
   #stuff

def main():
   proc = Process(target=bg_func,args=())  #Thread alternatively
   proc.start()

1 个答案:

答案 0 :(得分:0)

当我发现此问题时,我唯一能看到的解决方法是执行Double Fork。这是一个有效的示例。

import os
import time
from multiprocessing import Process


def bg():
    # ignore first call 
    if os.fork() != 0:
        return
    print('sub process is running')
    time.sleep(5)
    print('sub process finished')


if __name__ == '__main__':
    p = Process(target=bg)
    p.start()
    p.join()
    print('exiting main')
    exit(0)

输出显示子进程开始,主程序退出状态0,我的提示在后台程序打印最后一行之前返回。我们在后台运行。 :D

[0] 10:58 ~ $ python3 ./scratch_1.py
exiting main
sub process is running
[0] 10:58 ~ $ sub process finished