2

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

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

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

例如:

  • 进程 1 -> 启动单独的进程 -> 与单独的进程交谈
  • 进程2->注意单独的进程已启动并且不要启动另一个->与单独的进程交谈
  • 进程 3 -> 注意单独的进程已启动,不要启动另一个 -> 与单独的进程交谈

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

那可能吗 ?如何 ?

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

4

1 回答 1

1

是的,这是可能的。您可以使用 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']))
于 2012-08-17T08:49:24.213 回答