python-3.x - 如何创建一个独立的进程让python在后台运行

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

我正在尝试创建一个独立的幕后进程,该进程完全使用 python 独立运行。是否有可能创建这样一个进程,即使在退出 python 脚本之后,该进程仍然在后台运行。我使用 pyinstaller 创建了一个 .exe 文件,我希望该文件在后台运行,而不弹出控制台,这样用户就不会意识到该进程,除非他经常打开任务管理器。

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

即使在脚本执行完毕后,是否有可能让某些特定的代码片段在后台运行?或者完全在后台启动整个脚本而不显示任何控制台?

我尝试使用多处理模块中的 Process 类和线程模块中的 Thread 类,但所有脚本执行后都退出。即使是 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-3.x - 如何创建一个独立的进程让python在后台运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55538636/

相关文章:

c - 仅在线程中发生冲突时才使用互斥锁

process - 全局注册进程未注册

Python 奇怪的 [n 个字符] 编码错误?

python - 来自 numpy 数组的 Keras 自定义数据生成器

C# - 静态只读字符串——可能会遇到多线程问题?

c - 最早什么时候可以注册信号处理程序?

java - 以可移植的方式以编程方式打开文档

python - 解释 sys.stdin 的 python3 与 python 行为

python - Django 多个外键,相同的相关名称

java - 如何使用固定数量的工作线程实现简单线程