Multithreading 如何为twisted编写非阻塞代码
我有一个通过串口(是的,串口、arduino、rf24卡等)从自定义网络协议发送和接收数据的连接 我希望能够执行非阻塞代码,查询等待响应数据包的串行端口。 我已经知道,当我使用第三方库时,我可以使用deferToThread,但我不能修改,但事实并非如此,我可以修改代码。我只是想知道如何实现自己的非阻塞代码,该代码返回一个延迟值,稍后返回结果 例如:Multithreading 如何为twisted编写非阻塞代码,multithreading,twisted,Multithreading,Twisted,我有一个通过串口(是的,串口、arduino、rf24卡等)从自定义网络协议发送和接收数据的连接 我希望能够执行非阻塞代码,查询等待响应数据包的串行端口。 我已经知道,当我使用第三方库时,我可以使用deferToThread,但我不能修改,但事实并非如此,我可以修改代码。我只是想知道如何实现自己的非阻塞代码,该代码返回一个延迟值,稍后返回结果 例如: 发送ID为1的数据包并等待ID相同的ACK 在接收到的数据包队列中ID为1的数据包不可用时保持等待 如果找到ID为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
,并将它们映射到您发出的延迟的。当您收到一个数据包后,您将获取延迟的并使用.callback()
触发它
您必须填写代码来编写数据包,以及解析到达的数据包、获取id
和调用packetReceived
基本思想如下:
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
,并将它们映射到您发出的延迟的。当您收到一个数据包后,您将获取延迟的并使用.callback()
触发它
您必须填写代码来编写数据包,以及解析到达的数据包、获取id
和调用packetReceived
好答案-也许还值得给出一个在Twisted中使用串行端口传输的示例。好答案-也许还值得给出一个在Twisted中使用串行端口传输的示例。