简单的多进程多线程的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()
# print("thread")


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()