gpt4 book ai didi

python asyncore跟不上高数据率

转载 作者:行者123 更新时间:2023-11-28 17:45:53 26 4
gpt4 key购买 nike

我在 Linux 中有一个简单的 Asyncore 客户端与在 Windows 机器上用 C 语言开发的服务器进行交互。

该设置非常适合写入 asyncore 缓冲区的大约每秒一次的数据速率,但只要我的数据速率超过该速率(我每 0.1 秒测试一次),Asyncore 就不会发送所有写入。一些缓冲区值丢失并且永远不会到达服务器。

我怀疑这是因为 asyncore 通过一个循环,并且只检查缓冲区中是否有数据在每个循环中发送一次,如果数据速率高于循环时间,那么它们就会丢失。这是真的?如果是这样,是否有解决此问题的解决方法或 Asyncore 以外的其他套接字模块不会造成此问题?

这是我使用的代码:

class DETClient(asyncore.dispatcher):

buffer = ""
t = None

def __init__(self, host, port):

asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.connect((host,port))
self.host=host
self.port=port
self.t = ReceiverBoard(self)
self.t.start()

def initiate_connection_with_server(self):
print("trying to initialize connection with server...")
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.connect((self.host,self.port))

def sendCommand(self, command):
self.buffer = command +'\0'

def handle_connect(self):
pass

def handle_error(self):
print("problem reaching server.")
self.initiate_connection_with_server()

def handle_close(self):
self.t.stop()
self.close()

def handle_read(self):
message = str(self.recv(20)) #how many bytes should be read?

if (message=="b'system_bias_ON'"):
self.t.enable_sys_bias()

if (message=="b'system_bias_OFF'"):
self.t.disable_sys_bias()

if (message[2:5]=="DET"):
self.t.DET_bias_command_received = True
self.t.DET_bias_command_text = message

if (message[2:7]=="CURVE"):
self.t.DET_bias_command_received = True
self.t.DET_bias_command_text = message

def handle_write(self):
sent=self.send(self.buffer.encode())
self.buffer=""

最佳答案

我找到了这个问题的答案。在这种情况下,Asyncore 不是罪魁祸首。问题中提供的代码滥用了缓冲区接口(interface)。我所要做的就是将 handle_write 方法中的最后一行替换为以下行:

self.buffer = self.buffer[发送:]

这解决了问题

关于python asyncore跟不上高数据率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18280571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com