控制python进程的好方法

控制python进程的好方法,python,multiprocessing,Python,Multiprocessing,在哪里可以看到控制流程的最佳实践 我特别想知道如何发出关机命令。我在想一个全局布尔值,每个进程都会进行轮询 这也是在活动进程之间传递数据的好方法 我没有找到任何好的博客帖子,它们大多是how-tos全局布尔值的概念非常好,只是不能在进程之间共享。但您可以在每个子流程中保留该布尔值的副本 一种方法是与线程一起使用。诸如此类: from multiprocessing import Process, Pipe from threading import Thread Alive = True

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

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

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


我没有找到任何好的博客帖子,它们大多是how-tos

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

一种方法是与线程一起使用。诸如此类:

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()
请注意,每个子流程都需要
(父连接,子连接)
对。这是流程和子流程之间通信的标准方式

或者您可以使用数据库(我所说的数据库是指任何数据库,甚至是一个简单的文件)在进程之间共享数据。但是,您需要一个轮询线程来处理可能效率不高的问题

您还可以使用一些发布/订阅系统(这样您就不必担心轮询效率),如Redis,这可能是最好的,具体取决于您的需要


总的来说,流程越少共享越好。

非常感谢!这让一切都清楚了,谢谢你花时间做这件事