哪里是查看控制流程的最佳实践的好地方。
具体来说,我想知道如何发出关机命令。我在想一个全局布尔值,每个进程都会轮询
也是在活动进程之间来回传递数据的好方法。
我还没有找到任何好的博客文章,它们大多是如何做的
哪里是查看控制流程的最佳实践的好地方。
具体来说,我想知道如何发出关机命令。我在想一个全局布尔值,每个进程都会轮询
也是在活动进程之间来回传递数据的好方法。
我还没有找到任何好的博客文章,它们大多是如何做的
全局布尔值的想法非常好,只是您不能在进程之间共享它。但是您可以在每个子流程中保留该布尔值的副本。
一种方法是将管道和/或队列与线程一起使用。像这样的东西:
from multiprocessing import Process, Pipe
from threading import Thread
Alive = True
def listener_thread(conn):
global Alive
while True:
data = conn.recv()
if data == "kill":
Alive = False
break
def subprocess(conn):
t = Thread(target=listener_thread, args=(conn,))
t.start()
while Alive:
# do some stuff here
if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p = Process(target=subprocess, args=(child_conn,))
p.start()
# do some stuff
parent_conn.send("kill")
p.join()
(parent_conn, child_conn)
请注意,每个子流程都需要一对。这是进程和子进程之间通信的标准方式。
或者您可以使用数据库(我所说的数据库是指任何数据库,甚至是简单的文件)在进程之间共享数据。但是,您将需要一个可能效率不高的轮询线程。
您还可以使用一些发布/订阅系统(因此您不必担心轮询效率),例如 Redis,这可能是最好的,具体取决于您的需要。
一般来说,共享的进程越少越好。