【发布时间】:2013-01-13 04:22:33
【问题描述】:
最近在队列设计中引入了延迟处理的能力以及实现“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 循环在做什么,我在运行代码时遇到错误,所以我必须遗漏一些东西。
发生的问题错误: NameError:未定义全局名称“num_worker_threads”
感谢-Python新手-
【问题讨论】:
-
嗯,你有没有在任何地方定义过 num_worker_threads?
-
@Glycan 我不知道我要定义什么。这就是我想知道的。几乎都是如何使用的。
-
那个错误意味着你没有定义 num_worker_threads,不管是什么。我不知道 Queue 是什么,并且通常会尽量远离 python 中的线程,但你仍然需要在使用之前定义你的变量。查看文档以了解它应该是什么。
-
线程实际上在 python 中很有用。您只需要知道何时使用它们。正如 Glycan 所提到的,线程不会极大地帮助您提高处理速度,因为 python 使用称为全局解释器锁的东西。实际上,这意味着在给定时间只有一个线程在运行。但是,线程对于 IO 绑定进程(如读取文件)可能非常强大。在这种情况下,当从内存中检索数据时,存在允许处理继续进行的停机时间。
标签: python multithreading python-3.x queue