- 論壇徽章:
- 11
|
回復(fù) 1# SeriousCool
文檔的例子主要是解釋Queue的用法,而線程部分,為了簡(jiǎn)單則是無(wú)限循環(huán)。
如果要控制線程退出,還要修改代碼,起碼應(yīng)該有個(gè)標(biāo)志位控制,在此基礎(chǔ)上更接近現(xiàn)實(shí)的用法:- import queue
- import sys
- import threading
- def worker(name, q, exit_flag):
- while not exit_flag.is_set():
- try:
- # 超時(shí)控制,便于及時(shí)響應(yīng)exit_flag
- item = q.get(timeout=3)
- except queue.Empty:
- continue
- print('thread {}, item {}'.format(name, item), file=sys.stderr)
- q.task_done()
- def main():
- # 線程退出標(biāo)志位
- exit_flag = threading.Event()
- exit_flag.clear()
- # 創(chuàng)建共享隊(duì)列和線程池
- q = queue.Queue()
- num_of_threads = 5
- threads = [threading.Thread(target=worker, args=(str(i+1), q, exit_flag))
- for i in range(num_of_threads)]
- for t in threads:
- t.start()
- for i in range(50):
- q.put(i)
- q.join()
- # 任務(wù)處理完成,通知線程退出,并join等待
- exit_flag.set()
- for t in threads:
- t.join()
-
- if __name__ == '__main__':
- main()
復(fù)制代碼 |
|