我正在尝试将来自串口的一些数据放入多处理队列中,并使用另一个线程从队列中读取此数据,但似乎在完成写入任务之前,队列无法访问以进行读取: /
import Queue #
cola = Queue.Queue()
s_port = '/dev/ttyUSB' + sys.argv[1]
b_rate = 9600
ser = serial.Serial(
port=s_port,
baudrate=b_rate,
timeout=1
)
class worker:
def __init__(self,cola,ser):
self.cola = cola
self.ser = ser
def read_serial(self,ser):
ser.flushInput()
while True :
inp = ser.read(size=1)
byte = inp.encode('hex')
print cola.qsize() #just for debug
self.cola.put(byte)
def go(self):
th1 = threading.Thread(target=self.read_serial, args=[ser])
th1.start()
class worker2:
def __init__(self,cola,):
self.cola = cola
self.ser = ser
def getrx(self,cola):
while True :
rx = self.cola.get()
print str(rx)
pass
def go2(self):
th2 = threading.Thread(target=self.getrx, args=[cola])
th2.start()
t = worker(cola,ser)
t.go()
t2 = worker2(cola)
t2.go2()
任何想法?
答案 0 :(得分:1)
这里的问题与队列无关。
这一行:
th1 = threading.Thread(target=self.read_serial(ser))
...调用self.read_serial(ser)
,并将结果作为target
传递给后台线程运行。这个功能永远运行,所以没有其他任何事情发生。
您要做的是传递方法,而不是调用它。
th1 = threading.Thread(target=self.read_serial, args=[ser])
您在worker2
中遇到同样的问题,也需要解决这个问题。
所以,一旦你解决了这个问题,以及其他问题,你还需要做些什么才能让一个线程进入队列而另一个线程同时从队列中获取?
无。它只是自动运行。只需在一个帖子中调用put
,在另一个线程中调用get
即可。如果在读者线程中还没有什么可以得到的话,get
只会阻塞而不会返回,直到另一个线程执行put
,然后它会立即唤醒。