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()
全局布尔值的概念非常好,只是不能在进程之间共享它。但您可以在每个子进程中保留该布尔值的副本。你知道吗
一种方法是将pipes and/or queues与线程一起使用。类似于:
注意,每个子进程都需要一个
(parent_conn, child_conn)
对。这是进程和子进程之间通信的标准方式。你知道吗或者可以使用数据库(我所说的数据库是指任何数据库,甚至是一个简单的文件)在进程之间共享数据。然而,您将需要一个轮询线程,这可能不是有效的。你知道吗
你不需要像Redis那样担心哪个sub-pub系统的效率。你知道吗
一般来说,流程共享越少越好。你知道吗
相关问题 更多 >
编程相关推荐