- 论坛徽章:
- 11
|
回复 1# SeriousCool
文档的例子主要是解释Queue的用法,而线程部分,为了简单则是无限循环。
如果要控制线程退出,还要修改代码,起码应该有个标志位控制,在此基础上更接近现实的用法:- import queue
- import sys
- import threading
- def worker(name, q, exit_flag):
- while not exit_flag.is_set():
- try:
- # 超时控制,便于及时响应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():
- # 线程退出标志位
- exit_flag = threading.Event()
- exit_flag.clear()
- # 创建共享队列和线程池
- 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()
- # 任务处理完成,通知线程退出,并join等待
- exit_flag.set()
- for t in threads:
- t.join()
-
- if __name__ == '__main__':
- main()
复制代码 |
|