哪个协程是连续的?

问题描述 投票:1回答:1

我正在hbmqtt研究HBMQTT文档,并且有2个函数执行相同的操作,基本上是将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.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,据我了解,ensure_future()将任务调度为异步运行,而yield from似乎与await的目的相同,因此每个语句都将简单地阻塞直到任务完成。因此,描述应该是相反的。我是对还是错过了什么?

python mqtt python-asyncio
1个回答
0
投票

是的,协程的名称互换了,应该反过来。

© www.soinside.com 2019 - 2024. All rights reserved.