【发布时间】:2022-01-18 03:17:52
【问题描述】:
我编写了一个程序来使用每 10 毫秒通过 UDP 数据包发送给它的数据。我正在使用单独的线程,因为运行逻辑来处理数据可能需要不同的时间,如果超过 10 毫秒,我只希望它处理最近收到的数据报。我目前正在运行一个 while 循环,并通过 time.sleep(0.001) 每毫秒检查一次新报价。我刚刚了解到,在 windows server 2019 操作系统上处理这个 time.sleep() 实际上最多需要 16 毫秒,它会延迟一切。我可以只使用 pass 而不是 time.sleep ,但这最终会使用过多的 CPU(我正在运行该程序的多个实例)。有没有办法让程序暂停并在继续之前等待 maindata.newquote == True ?诀窍是我希望它能够非常快速地响应(不到一毫秒),而不是等待下一个 Windows 定时器中断。
class maindata:
newquote = False
quote = ''
def startquotesUDP(maindata,myaddress,port):
UDPServerSocket = socket(family=AF_INET, type=SOCK_DGRAM)
UDPServerSocket.bind((myaddress, port))
while True:
bytesAddressPair = UDPServerSocket.recvfrom(bufferSize)
#parse raw data
maindata.quote = parsed_data
maindata.newquote = True
threading.Thread(target=startquotesUDP,args=(maindata,address,port,)).start()
while True:
if maindata.newquote == False:
time.sleep(0.001) #This is what I want to improve
else:
#process maindata.quote
maindata.newquote = False
【问题讨论】:
-
在线程之间使用双端队列?在消费线程中对信号量使用等待,并且馈送线程命中信号量? IE。避免 time.sleep()
-
这能回答你的问题吗? How best to wake a sleeping Python thread?
标签: python python-3.x multithreading