Python 哪个协同程序是顺序的?
我正在研究HBMQTT文档,有两个函数做同样的事情,基本上是将3条消息发布到MQTT代理:Python 哪个协同程序是顺序的?,python,mqtt,python-asyncio,Python,Mqtt,Python Asyncio,我正在研究HBMQTT文档,有两个函数做同样的事情,基本上是将3条消息发布到MQTT代理: @asyncio.coroutine def test_coro(): C = MQTTClient() yield from C.connect('mqtt://test.mosquitto.org/') tasks = [ asyncio.ensure_future(C.publish('a/b', b'TEST MESSAGE WITH QOS_0')),
@asyncio.coroutine
def test_coro():
C = MQTTClient()
yield from C.connect('mqtt://test.mosquitto.org/')
tasks = [
asyncio.ensure_future(C.publish('a/b', b'TEST MESSAGE WITH QOS_0')),
asyncio.ensure_future(C.publish('a/b', b'TEST MESSAGE WITH QOS_1', qos=QOS_1)),
asyncio.ensure_future(C.publish('a/b', b'TEST MESSAGE WITH QOS_2', qos=QOS_2)),
]
yield from asyncio.wait(tasks)
logger.info("messages published")
yield from C.disconnect()
@asyncio.coroutine
def test_coro2():
try:
C = MQTTClient()
ret = yield from C.connect('mqtt://test.mosquitto.org:1883/')
message = yield from C.publish('a/b', b'TEST MESSAGE WITH QOS_0', qos=QOS_0)
message = yield from C.publish('a/b', b'TEST MESSAGE WITH QOS_1', qos=QOS_1)
message = yield from C.publish('a/b', b'TEST MESSAGE WITH QOS_2', qos=QOS_2)
#print(message)
logger.info("messages published")
yield from C.disconnect()
except ConnectException as ce:
logger.error("Connection failed: %s" % ce)
asyncio.get_event_loop().stop()
文件接着将其描述为:
test_coro()按顺序发布3条消息。test_coro2()异步发布相同的消息
这毫无意义,因为我也一直在研究
asyncio
,据我所知sure_future()
将任务安排为异步运行,而从中产生的收益似乎与wait
的目的相同,因此,这些语句中的每一条都将简单地阻塞,直到任务完成。因此,描述应该是相反的。我是对的还是遗漏了什么?是的,协同程序的名称被交换了,应该是相反的
此外:代码已经过时。
i、 e
- 无需再将函数标记为具有此类装饰器的协同程序,只需使用
async
关键字即可
- 使用
wait
而不是yield from