2012-08-17 31 views
2

我知道如何使用multiprocessing来启动一个单独的进程并进行并发数据处理。我现在想知道的是,如果我有几个主进程(假设有几个wsgi进程),我怎样才能为所有主进程创建一个单独的进程?如何在Python中为多个进程启动和共享一个且只有一个单独的进程?

每个主进程应该能够使用队列与独立进程进行通信,但每个主进程都可以在不同的Python虚拟机中分别启动。

EG:

  • 过程中1 - >启动单独的进程 - >聊到单独的进程
  • 过程2 - >注意单独的进程启动和不启动其他 - >聊到单独的进程
  • 过程3 - >注意单独的进程启动和不启动其他 - >聊到单独的进程

如果一个进程的通知的过程中已经死亡,它可以再次启动它。

这可能吗?如何 ?

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

+0

Python VM?我想你是指Python解释器。 – 2012-08-17 07:02:55

回答

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'])) 
+0

整体目的是避免设置一个额外的工具。否则,我只会使用芹菜。感谢您的链接,这是有帮助的。我仍然不确定如何将信息排入该进程。 – 2012-08-17 11:21:54

+0

Linux为IPC提供了许多方法。看看这里:http://tldp.org/LDP/lpg/node7.html,并选择一个看起来最简单的。命名管道可能是最基本的。 – aychedee 2012-08-17 11:53:01

相关问题