import time
import threading
import queue
def test(name):
print(name,time.asctime( time.localtime(time.time()) ))
time.sleep(1)
if __name__ == '__main__':
q=queue.Queue()
for i in range(10):
q.put(i)
while not q.empty():
Threads = []
for i in range(3):
t=threading.Thread(target=test,args=(q.get(),))
t.setDaemon(True)
Threads.append(t)
for t in Threads:
t.start()
for t in Threads:
t.join()
print(str(q.qsize())+'个')
print('end')
运行结果
C:\python38\python3.exe C:/Users/DELL/PycharmProjects/pythonProject1/t.py
0 Wed Jun 30 11:30:37 2021
1 Wed Jun 30 11:30:37 2021
2 Wed Jun 30 11:30:37 2021
7个
3 Wed Jun 30 11:30:38 2021
4 Wed Jun 30 11:30:38 2021
5 Wed Jun 30 11:30:38 2021
4个
6 Wed Jun 30 11:30:39 2021
7 Wed Jun 30 11:30:39 2021
8 Wed Jun 30 11:30:39 2021
1个
队列里面一共10条数据,设置了3个线程,运行了3次之后队列里面还剩下1条数据,然后就一直卡住不动了,有什么办法解决吗
import time
import threading
import queue
def test(name):
print(name,time.asctime( time.localtime(time.time()) ))
time.sleep(1)
if __name__ == '__main__':
q=queue.Queue()
for i in range(10):
q.put(i)
while not q.empty():
Threads = []
for i in range(3):
if not q.empty():
t=threading.Thread(target=test,args=(q.get(),))
t.setDaemon(True)
Threads.append(t)
for t in Threads:
t.start()
for t in Threads:
t.join()
print(str(q.qsize())+'个')
print('end')
重点在楼主原代码16行,当队列长度为1,循环执行3次get,这里就中断了。。。所以不会走到后续的线程start。执行get之前先确保队列不为空
附图: