1

哪里是查看控制流程的最佳实践的好地方。

具体来说,我想知道如何发出关机命令。我在想一个全局布尔值,每个进程都会轮询

也是在活动进程之间来回传递数据的好方法。

我还没有找到任何好的博客文章,它们大多是如何做的

4

1 回答 1

2

全局布尔值的想法非常好,只是您不能在进程之间共享它。但是您可以在每个子流程中保留该布尔值的副本。

一种方法是将管道和/或队列与线程一起使用。像这样的东西:

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,这可能是最好的,具体取决于您的需要。

一般来说,共享的进程越少越好。

于 2013-07-11T22:32:13.630 回答