【发布时间】:2022-01-16 14:54:03
【问题描述】:
当使用线程时,您正在寻找同时快速执行多个实例,.join() 不会通过等待每个线程在开始之前完成来破坏该目的,这在本质上不是准确的吗与常规循环相同。当不使用 join 时,线程会在启动时尽快触发。我的问题可能听起来很幼稚,因为我还在努力学习。
假设 itemsArr 有 1000 个项目,itemQueryRequest 需要 3 秒来执行, 您希望每个项目尽可能接近相同的查询 时间到了,所以你可以使用线程。
此外,一旦目标函数完成,无论加入,线程都会死亡,所以你..我错过了什么。
#lightning fast
import threading
for item in itemsArr:
t = Thread(target=itemQueryRequest, args=(item,))
t.start()
# SLOW
th = []
for item in itemsArr:
t = Thread(target=itemQueryRequest, args=(item,))
th.append(t)
th.start()
th.join() // < SLOW
【问题讨论】:
-
如果你从来没有
join你的线程,你怎么知道什么时候使用他们计算的值或他们创建的文件? -
注意:尽管有这个名字,python 中的
threading模块不提供多线程。 -
@spectras 怎么不行?
-
@KellyBundy 由于全局解释器锁,一次只有一个线程可以执行 Python 代码(来自模块的文档)。缺乏适当的线程是 python 的一个众所周知的限制。
-
@spectras 它提供了有限的多线程形式;例如您的线程可以彼此异步进行,并且您可以同时进行多个阻塞 I/O 操作,这是单个线程无法做到的。尽管如此,如果/何时他们可以摆脱 GIL 并允许 Python 进程使用多个内核的 CPU 周期,那将是一件好事。
标签: python multithreading