如何在后台创建一个 python 运行 的独立进程
How can you create a independent process with python running in the background
我正在尝试创建一个独立的幕后流程,运行完全独立于 python。是否可以创建这样一个进程,即使在退出 python 脚本后进程仍然在后台保持 运行ning。我已经使用 pyinstaller 创建了一个 .exe 文件,我希望该文件在后台 运行 而不会弹出控制台,这样用户就不会意识到这个过程,除非他经常打开他的任务管理器。
multiprocessing 模块有助于创建进程,但它们会在脚本执行完成后终止。与线程模块相同。
是否可以通过任何方式 pos 将某些特定的代码片段 运行ning 保留在后台,甚至在脚本执行完毕之后?或者完全在后台启动整个脚本而不显示任何控制台?
我曾尝试使用多处理模块中的进程 class 和线程模块中的线程 class,但都在脚本执行后退出。甚至 subprocess 和 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()
当我发现这个问题时,我能想到的唯一解决办法就是 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
我正在尝试创建一个独立的幕后流程,运行完全独立于 python。是否可以创建这样一个进程,即使在退出 python 脚本后进程仍然在后台保持 运行ning。我已经使用 pyinstaller 创建了一个 .exe 文件,我希望该文件在后台 运行 而不会弹出控制台,这样用户就不会意识到这个过程,除非他经常打开他的任务管理器。
multiprocessing 模块有助于创建进程,但它们会在脚本执行完成后终止。与线程模块相同。
是否可以通过任何方式 pos 将某些特定的代码片段 运行ning 保留在后台,甚至在脚本执行完毕之后?或者完全在后台启动整个脚本而不显示任何控制台?
我曾尝试使用多处理模块中的进程 class 和线程模块中的线程 class,但都在脚本执行后退出。甚至 subprocess 和 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()
当我发现这个问题时,我能想到的唯一解决办法就是 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