简单的多进程多线程的demo,但是在windows下能正常运行,在linux下会阻塞在q.get()位置处。
有什么好的办法可以在linux下去共用一个队列吗。
实现的效果:
三个进程,每个进程里面启动九个线程,使其能够同时消耗q队列里面的数据。
不明白为什么linux下什么机制造成的阻塞,如何避免阻塞。 (win下和mac下正常)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| from threading import Thread,Event from multiprocessing import Queue,Process import queue import time
def test_get_th(q,): while True: ss = q.get() print(ss) time.sleep(3)
def test_get(q): for i in range(9): Thread(target=test_get_th, args=(q,)).start()
def test_put(q): i=0 while True: i += 1 q.put(i) if i%1000==0: time.sleep(1)
if __name__ == '__main__': q = Queue(3) e = Event() e.set()
for i in range(3): Process(target=test_get, args=(q,)).start() print("process") Thread(target=test_put, args=(q,)).start()
|