我正在使用 python 将硬件 USB 嗅探器设备与供应商提供的 python API 连接,并且我试图在无限循环中的单独线程中从设备中读取(usb 数据包)(工作正常)。问题是我的主循环似乎再也没有被安排(我的读取循环得到了所有的关注)。
代码看起来很像这样:
from threading import Thread
import time
usb_device = 0
def usb_dump(usb_device):
while True:
#time.sleep(0.001)
packet = ReadUSBDevice(usb_device)
print "packet pid: %s" % packet.pid
class DumpThread(Thread):
def run(self):
usb_dump()
usb_device = OpenUSBDevice()
t = DumpThread()
t.start()
print "Sleep 1"
time.sleep(1)
print "End"
CloseUSBDevice(usb_device)
sys.exit(0)
(我可以粘贴实际代码,但由于您需要硬件设备,我认为它不会有太大帮助)。
我希望这段代码在主线程终止整个程序之前开始转储 USB 数据包大约一秒钟。但是,我看到的只是“睡眠 1”,然后该usb_dump()
过程将永远运行。如果我在程序的内部循环中取消注释“time.sleep(0.001)”语句,usb_dump()
事情就会以我期望的方式开始工作,但是python代码变得无法跟上所有传入的数据包:-(
供应商告诉我这是一个 python 调度程序问题,而不是他们的 api 的错,因此对我没有帮助:
«但是,在 Python 中使用线程时,您似乎遇到了一些细微差别。通过将 time.sleep 放在 DumpThread 线程中,您明确地向 Python 线程系统发出信号以放弃控制。否则,由 Python 解释器决定何时切换线程,它通常在执行了一定数量的字节码指令后才会这样做。»
有人可以确认python是这里的问题吗?是否有另一种方法可以使 DumpThread 释放控制?还有其他想法吗?