在哪里可以看到控制流程的最佳实践。
具体来说,我想知道如何提供关机命令。我正在考虑一个全局布尔值,每个进程轮询
也是在活动进程之间传递数据和从中传递数据的好方法。
我没有找到任何好的博客文章,他们大多是怎么样的
答案 0 :(得分:2)
全局布尔值的想法非常好,除了你不能在进程之间共享它。但是你可以在每个子进程中保留该boolean的副本。
一种方法是将pipes and/or queues与线程一起使用。这样的事情:
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,这可能是最好的,具体取决于您的需求。
一般来说,流程越少,分享越好。