在python中学习队列模块(如何运行它)
发布时间:2020-12-20 13:04:41 所属栏目:Python 来源:网络整理
导读:最近引入了队列设计,关于延迟处理能力以及实现“FIFO”等. 查看文档以尝试获取示例队列,以了解如何在我自己的设计/程序中实现它.但我遇到运行此代码的问题: import queuedef worker(): while True: item = q.get() do_work(item) q.task_done()def main():
最近引入了队列设计,关于延迟处理能力以及实现“FIFO”等.
查看文档以尝试获取示例队列,以了解如何在我自己的设计/程序中实现它.但我遇到运行此代码的问题: import queue def worker(): while True: item = q.get() do_work(item) q.task_done() def main(): q = queue.Queue(maxsize=0) for i in range(num_worker_threads): t = Thread(target=worker) t.daemon = True t.start() for item in source(): q.put(item) q.join() # block until all tasks are done main() 问题:希望有人解释for循环正在做什么,我只是运行代码时出错,所以我不得不遗漏一些东西. 出现问题错误: 谢谢-Python新手 – 解决方法
for循环启动了许多工作线程来执行“worker”定义的功能.这是应该在python 2.7中运行在您的系统上的工作代码.
import Queue import threading # input queue to be processed by many threads q_in = Queue.Queue(maxsize=0) # output queue to be processed by one thread q_out = Queue.Queue(maxsize=0) # number of worker threads to complete the processing num_worker_threads = 10 # process that each worker thread will execute until the Queue is empty def worker(): while True: # get item from queue,do work on it,let queue know processing is done for one item item = q_in.get() q_out.put(do_work(item)) q_in.task_done() # squares a number and returns the number and its square def do_work(item): return (item,item*item) # another queued thread we will use to print output def printer(): while True: # get an item processed by worker threads and print the result. Let queue know item has been processed item = q_out.get() print "%d squared is : %d" % item q_out.task_done() # launch all of our queued processes def main(): # Launches a number of worker threads to perform operations using the queue of inputs for i in range(num_worker_threads): t = threading.Thread(target=worker) t.daemon = True t.start() # launches a single "printer" thread to output the result (makes things neater) t = threading.Thread(target=printer) t.daemon = True t.start() # put items on the input queue (numbers to be squared) for item in range(10): q_in.put(item) # wait for two queues to be emptied (and workers to close) q_in.join() # block until all tasks are done q_out.join() print "Processing Complete" main() @handle的Python 3版本 import queue import threading # input queue to be processed by many threads q_in = queue.Queue(maxsize=0) # output queue to be processed by one thread q_out = queue.Queue(maxsize=0) # number of worker threads to complete the processing num_worker_threads = 10 # process that each worker thread will execute until the Queue is empty def worker(): while True: # get item from queue,item*item) # another queued thread we will use to print output def printer(): while True: # get an item processed by worker threads and print the result. Let queue know item has been processed item = q_out.get() print("{0[0]} squared is : {0[1]}".format(item) ) q_out.task_done() # launch all of our queued processes def main(): # Launches a number of worker threads to perform operations using the queue of inputs for i in range(num_worker_threads): t = threading.Thread(target=worker) t.daemon = True t.start() # launches a single "printer" thread to output the result (makes things neater) t = threading.Thread(target=printer) t.daemon = True t.start() # put items on the input queue (numbers to be squared) for item in range(10): q_in.put(item) # wait for two queues to be emptied (and workers to close) q_in.join() # block until all tasks are done q_out.join() print( "Processing Complete" ) main() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |