我正在尝试创建一个独立的后台进程,该进程完全由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()
答案 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