控制python进程的好方法

时间:2013-07-11 20:36:25

标签: python multiprocessing

在哪里可以看到控制流程的最佳实践。

具体来说,我想知道如何提供关机命令。我正在考虑一个全局布尔值,每个进程轮询

也是在活动进程之间传递数据和从中传递数据的好方法。

我没有找到任何好的博客文章,他们大多是怎么样的

1 个答案:

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

一般来说,流程越少,分享越好。