我正在编写一个最小的服务器来使用twisted 吐出一个永无止境的传感器数据流。
传感器数据捕获库使用 gevent 和一个内部 gevent.Queue 来存储我提供的数据。
出于某种原因,数据以极其缓慢且看似缓冲的方式发送。我已经检查过传感器是否以均匀且高速的速度生成数据,所以这不是问题。替换扭曲生产者中真实数据的出队并将其设置为常量也可以正常工作 - 所以它必须与 gevent 和扭曲的交互方式有关。
设置数据生成传感器的代码如下所示(在生产者构造函数中):
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')