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

如何在两个Python文件中终止进程?解决跨模块进程实例访问报错

问题原因

AttributeError的本质是:script1.py里的demo进程变量定义在if __name__ == "__main__"代码块中。当script2.py导入script1时,script1的__name__值为模块名'script1',而非'__main__',因此该代码块不会执行,demo变量从未被创建,自然无法通过script1.demo访问。

解决方案

修改两个文件的结构,将进程启动逻辑封装为模块级可调用的函数,让script2能获取到进程对象:

修改后的script1.py

import multiprocessing
import time

def worker():
    while True:
        print("Working........")
        time.sleep(5)

def start_worker_process():
    # 创建并启动进程,返回进程对象
    demo = multiprocessing.Process(target=worker, args=())
    demo.start()
    return demo

if __name__ == "__main__":
    # 直接运行script1时的启动逻辑
    demo = start_worker_process()
    # demo.terminate()

修改后的script2.py

import time
import script1

if __name__ == "__main__":
    # 调用script1的函数启动进程,拿到进程对象
    worker_process = script1.start_worker_process()
    print("script2......")
    time.sleep(2)
    # 终止目标进程
    worker_process.terminate()

这样修改后,script2导入script1时可以通过调用start_worker_process()获取到进程实例,后续就能正常调用terminate()方法终止进程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:32:21