【发布时间】:2018-01-04 03:27:27
【问题描述】:
我为 Telnet 通信创建了一个套接字对象,并使用它与 API 通信,发送和接收数据。我需要将其配置为可以同时发送和接收数据。我的意思是,一旦应用程序尝试发送数据,就应该发送数据,并且数据应该在收到后立即处理。目前,我有一个配置,它允许即时接收,并以非常短的延迟发送第二优先级。
目前我发现做到这一点的最佳方法是拥有一个事件队列,并将数据推送到其中,然后有一个响应队列,我将来自服务器的消息放入其中。我有一个线程每 0.1 秒轮询一次缓冲区以检查新数据,如果没有,它会检查请求队列并处理那里的任何内容,并且在连续循环中运行。然后我让线程将数据插入请求队列,并从响应队列中读取数据。一切都几乎是线性的,这可以正常工作。
这不是“异步”,从某种意义上说,我不得不尽可能地异步而没有真正实现它。有没有合适的方法来做到这一点?或者引擎盖下的任何事情都会和我做的完全一样?
我为解决这个问题而调查的其他事情:
- 一个回调系统,我可能会调用
socket.on_receipt(handle_message, args)以args作为参数调用方法handle_message,将接收到的数据传递给方法。我能找到实现这一点的唯一方法是实现我已经拥有的,然后为它注册一个回调(事实上,这非常接近我已经拥有的)。
请注意:我将此作为学习练习来更好地了解异步系统的工作原理,而不是了解如何使用特定库,因此请不要推荐现有库,除非它包含非常清晰且易于使用的代码完整而简洁地理解并回答问题。
【问题讨论】:
标签: python multithreading sockets asynchronous