【发布时间】:2020-05-15 14:07:02
【问题描述】:
AWS IoT python Sdk有一个函数publishAsync
函数的签名是publishAsync(topic, payload, QoS, ackCallback=None)
我想把它变成一个协程并使用 asyncio。
我想做的是:
- 连接到 AWS
- 异步发布 10 条消息
- 断开连接
我不知道应该如何将该函数包装为异步函数。
async def asyncPublish(self,
msg:str,
topic:str,
QoS=1):
# the publishAckFn
def internalPubAckHandler(mid):
print(json.dumps({
'messageID':mid,
'acknowledged':True
}))
return True
pass
# publish to the topic asynchronously
messageID = self.awsIoTClient.publishAsync(topic,msg,QoS,ackCallback=internalPubAckHandler)
print(json.dumps({
'messageID':messageID,
'topic':topic,
'payload':msg,
'QoS':QoS,
'async':True
}))
pass
---- in my main file
tasks = []
for i in range(10):
tasks += asyncPublish('test','test')
pass
loop = asyncio.get_event_loop()
loop.set_debug(True) # debug mode
gw1.connect()
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
gw1.disconnect()
但是当我这样做时,断开连接将比 internalPubAckHandler 更快地调用 而且我不会得到任何确认。
【问题讨论】: