2

マルチプロセッシングを使用して別のプロセスを開始し、同時データ処理を行う方法を知っています。

私が今知りたいのは、複数のメイン プロセス (たとえば、複数の wsgi プロセス) がある場合、すべてのメイン プロセスに対して 1 つの個別のプロセスを作成するにはどうすればよいかということです。

各メイン プロセスは、キューを使用して別のプロセスと通信できる必要がありますが、それぞれ別の Python VM で個別に開始されます。

例えば:

  • プロセス 1 -> 別のプロセスを開始 -> 別のプロセスに話しかける
  • プロセス 2 -> 別のプロセスが開始されていることに注意し、別のプロセスを開始しない -> 別のプロセスと話す
  • プロセス 3 -> 別のプロセスが開始されていることに注意し、別のプロセスを開始しない -> 別のプロセスと話す

1 つのプロセスがプロセスが終了したことに気付いた場合、そのプロセスを再び開始することができます。

それは可能ですか?そしてどうやって ?

はいの場合は、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 に答える