我知道如何使用 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']))
