python 多线程问题

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
73 Wed Jun 30 11:30:38 2021
4 Wed Jun 30 11:30:38 2021
5 Wed Jun 30 11:30:38 2021
46 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之前先确保队列不为空

附图: img