从另一个模块停止多处理线程

Stop multiprocessing thread from another module

我想在模块 A 的模块 B 中的多进程中启动无限循环。稍后,我也想终止模块 A 的多进程。

我遇到的问题是,如果我尝试在 B 中保存像 keep_running 这样的布尔值,即使我尝试使用 global,它也会不断重置。我读过 global 最好避免。

一个

import multiprocessing

keep_running = True

def stop_it(conf):
   global keep_running
   keep_running = False

def start_it(arg):
   while keep_running:
       do_stuff(arg)
       time.sleep(1)

def main(args):
   ...
   configs.configuartions.Configurations()
   configs.process = multiprocessing.Process(target=start_it, args=(arg,))
   configs.process.start()

if __name__ == 'main':
   import sys
   main(sys.argv[1:])

B

import A.main as m


def on_init(<args>):
   m.main([conf_file, database])

def on_stop(conf):
   m.stop_it(conf)

完成此任务的最佳方法是什么?

如果您使用多处理,则您创建了无法访问彼此变量的独立进程。在这种情况下,您必须通过管道、信号、套接字或标志文件进行通信。

为了能够访问彼此的变量,您将使用线程而不是多处理。但是,您仍然可以使用 os.kill 通过向其发送 SIGTERMSIGKILL 来终止另一个进程。为此,您需要 PID,您可以在示例中将其作为 configs.process.pid

更多信息在官方文档中:https://docs.python.org/3/library/multiprocessing.html