0

タイトルに書いた通り

コード例:

import gevent
from gevent.queue import Queue

class Worker(gevent.Greenlet):
    def __init__(self, sock):
        self.queue = Queue()
        self.sock = sock
        super(Worker, self).__init__()

    def _run(self):
        self.running = True
        while self.running:
            msg_from_queue = self.queue.get()    # block call
            msg_from_sock = self.sock.recv(128)  # block call

worker = Worker(sock)
worker.start()

私はワーカーが2つのイベントを処理したい:

  1. 靴下からのメッセージ受信
  2. キューからメッセージを取得

しかし、2つはすべてブロック呼び出しです

労働者が靴下とキューから同時に取得できるようにするにはどうすればよいですか?

4

2 に答える 2

1

私は方法を発見しました:

class Worker(gevent.Greenlet):
    def _sock_recv(self):
        # ...
    def _queue_get(self):
        # ...
    def _run(self):
        recv = gevent.spawn(self._sock_recv)
        get = gevent.spawn(self._queue_get)
        gevent.joinall([recv, get])
于 2013-06-17T08:45:31.637 に答える