使用asyncio ioloop和pyzmq

时间:2017-12-24 04:35:13

标签: python-3.5 python-asyncio event-loop pyzmq

我想用zmq套接字创建一个tcp服务器。以下代码使用python' s asyncio的ioloop创建了使用zmq套接字的tcp服务器。

在下面的代码中,我创建了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())

1 个答案:

答案 0 :(得分:1)

我不确定我理解你想要什么,但这里有一些想法:当我们说'#34; asyncio event loop"我们指的是一些在脚本中执行协同程序的全局对象。您已经使用此事件循环,直到使用行recv_and_process完成协程loop.run_until_complete(recv_and_process())

运行asyncio事件循环来执行协同程序并不意味着你的程序不应该有普通的while循环语句。虽然循环可以像往常一样用于相同的目的 - 例如,重复执行某些操作,例如,包括等待某些协同程序。