zmqソケットを持つtcpサーバーを作成したいと思います。次のコードは、Pythonのasyncioのioloopを使ってzmqソケットを使ってtcpサーバーを作成します。asyncio ioloopとpyzmqの使用
次のコードでは、着信接続を待機するzmqソケットを作成しています。コルーチンrecv_and_process
は、接続をリッスンし、着信接続に応答するwhileループを持つソケットを作成します。
私の質問は、while
ループを排除し、その代わりに元のasyncio event loop
を使用する方法ですか?
import asyncio
import zmq
import zmq.asyncio
zmq.asyncio.install()
ctx = zmq.asyncio.Context()
@asyncio.coroutine
def recv_and_process():
sock = ctx.socket(zmq.PULL)
sock.bind('tcp://127.0.0.1:8888')
while True:
msg = yield from sock.recv_multipart() # waits for msg to be ready
print(msg)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(recv_and_process())
無限のwhileループを配置することは、繰り返し何かを行うコルーチンの一般的なパターンです。私が知っているように、イベントループが単独で作業を委任するオプションはありません。 – SangminKim