我有一个连接,通过串口发送和接收来自自定义网络协议的数据(是的,串口,arduino,rf24卡等)。
我希望能够执行查询串口等待响应数据包的非阻塞代码。 我已经知道当我使用第三方库时我可以使用deferToThread我无法修改,但事实并非如此,我可以修改代码。我只想知道如何实现自己的非阻塞代码,该代码返回Deferred并稍后返回结果。
例如:
谢谢!
答案 0 :(得分:1)
基本理念如下:
id_to_deferred_map = {}
def sendPacket(id, ...):
... # write to transport
d = Deferred()
id_to_deferred_map[id] = d
return d
# In protocol:
def packetReceived(id, ...):
d = id_to_deferred_map[id]
del id_to_deferred_map[id]
d.callback()
这应该会给你一个想法。您只需要保持状态以便记住id
并将它们映射到您已发出的Deferred
。当您收到数据包后,您将获取Deferred
并使用.callback()
触发该数据包。
您必须填写代码来编写数据包,并解析到达的数据包,获取id
并调用packetReceived
。