Skip to main content
 首页 » 编程设计

python之如何在 Python 中为多个进程启动和共享一个且唯一的单独进程

2025年05月04日8傻小

我知道如何使用 multiprocessing启动一个单独的进程并进行并发数据处理。

我现在想知道的是,如果我有几个主进程(比方说几个 wsgi 进程),我如何才能为所有主进程只创建一个单独的进程?

每个主进程都应该能够使用队列与单独的进程通信,但每个进程都是在不同的 Python VM 中单独启动的。

例如:

  • 进程 1 -> 启动单独的进程 -> 与单独的进程对话
  • 进程 2 -> 注意单独的进程已启动,不要启动另一个 -> 与单独的进程对话
  • 进程 3 -> 注意单独的进程已启动,不要启动另一个 -> 与单独的进程对话

如果一个进程注意到该进程已经终止,它可以重新启动它。

这可能吗?以及如何?

如果是,假设它必须涉及使用 PID 文件。

请您参考如下方法:

是的,这是可能的。您可以使用 pidfile 或者(如果您使用的是 Linux)您可以使用这样的套接字:https://stackoverflow.com/a/7758075/639295 .

您也可以考虑使用像 Redis 这样的东西来进行进程间通信。它有一个简单的 Python api,可以很容易地让多个进程监听另一个。

这是一个双方的例子,更大类的方法。

def redis_listener(self): 
    r = redis.Redis(host='localhost', db=0) 
    pubsub = r.pubsub() 
    pubsub.psubscribe('a.channel') 
    for message in pubsub.listen(): 
        logging.info('Received message: %s' % (message,)) 
        self.parse_message(message) 
 
 
def redis_broadcaster(): 
    r = redis.Redis(host='localhost', db=0) 
    pubsub = r.pubsub() 
    pubsub.psubscribe('a.*') 
    for message in pubsub.listen(): 
        if message['pattern'] == None: 
            continue 
        symbol = message['pattern'].split('.')[1] 
        for listener in WATCHERS[symbol]: 
            listener.write_message(unicode(message['data']))