如何在两个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
相关产品推荐
相关产品推荐

