我正在编写一个最小的服务器来使用twisted来吐出一个永无止境的传感器数据流。
传感器数据捕获库使用gevent和内部gevent.Queue来存储我正在提供的数据。
出于某种原因,数据以缓慢且看似缓冲的方式发送。我已经检查过数据是从传感器以均匀和高速生成的,所以这不是问题所在。替换扭曲的生成器中的实际数据的出列并将其设置为常量也可以正常工作 - 因此它必须与gevent和twisted交互的方式相关。
设置数据生成传感器的代码如下所示(在生成器构造函数中):
gevent.spawn(self._headset.setup)
gevent.sleep(1)
扭曲的resumeProducing函数如下所示:
def resumeProducing(self):
self._paused = False
while not self._paused:
packet = self._headset.dequeue()
sensors = packet.sensors
data_str = ",".join(str(sensors[x]['value']) for x in sensor_names)
self._proto.transport.write(data_str + '\n')
答案 0 :(得分:1)
我猜gevent循环运行不正常,你应该尝试一下 扭曲的gevent reactor:
http://wiki.inportb.com/wiki/Projects:Python:Geventreactor
就像在导入twisted之前插入这两行一样简单:
import geventreactor
geventreactor.install()