You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免Python多进程spawn模式加载修改后的脚本?

问题分析

使用spawn模式启动多进程时,每次创建子进程都会重新启动Python解释器、导入并执行主脚本文件,因此修改脚本并保存后,新启动的子进程会加载最新的代码版本,导致运行逻辑变化甚至崩溃。而fork模式是直接复制父进程内存空间,不会重新读取脚本文件,因此不受修改影响。

解决方案

以下是三种在spawn模式下安全编辑代码、不影响后台进程的实现方式:

方案1:固化子进程逻辑为字符串传递

将需要稳定运行的函数逻辑以字符串形式定义在主进程中,子进程通过执行这段字符串运行逻辑,而非从脚本文件读取。后续修改脚本文件时,子进程仍会执行启动时确定的代码。

import time
import multiprocessing

# 固化子进程要执行的逻辑代码
WORKER_LOGIC = """
def print_something():
    print("1")
"""

def run_worker(logic_code):
    # 执行传递的逻辑代码,定义目标函数
    exec(logic_code)
    # 调用函数
    print_something()

def main():
    multiprocessing.set_start_method('spawn')
    
    while True:
        # 传递固化的逻辑代码给子进程
        process = multiprocessing.Process(target=run_worker, args=(WORKER_LOGIC,))
        process.start()
        process.join()
        time.sleep(1)

if __name__ == "__main__":
    main()

方案2:动态捕获启动时的函数源代码

借助inspect模块在主进程启动时捕获目标函数的源代码,再传递给子进程执行,确保子进程始终使用启动时的代码版本。

import time
import multiprocessing
import inspect

def print_something():
    print("1")

def run_worker(source_code):
    exec(source_code)
    print_something()

def main():
    multiprocessing.set_start_method('spawn')
    # 启动时捕获目标函数的源代码
    worker_source = inspect.getsource(print_something)
    
    while True:
        process = multiprocessing.Process(target=run_worker, args=(worker_source,))
        process.start()
        process.join()
        time.sleep(1)

if __name__ == "__main__":
    main()

方案3:拆分核心逻辑到独立模块

将需要稳定运行的函数放到单独的模块文件中,主脚本仅负责启动子进程调用该模块的函数。只要不修改这个独立模块,后续编辑主脚本不会影响子进程的执行逻辑。

  1. 创建stable_worker.py文件:
def print_something():
    print("1")
  1. 主脚本代码:
import time
import multiprocessing
import stable_worker

def main():
    multiprocessing.set_start_method('spawn')
    
    while True:
        process = multiprocessing.Process(target=stable_worker.print_something)
        process.start()
        process.join()
        time.sleep(1)

if __name__ == "__main__":
    main()

内容的提问来源于stack exchange,提问作者XiozZe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 14:51:04