来自python threading文档
在CPython中,由于Global Interpreter Lock,只有一个线程可以 一次执行Python代码(即使某些性能导向 图书馆可能会克服这个限制)。如果你想要你的 应用程序,以更好地利用计算资源 多核机器,建议您使用多处理。然而, 如果要运行多个线程,线程仍然是一个合适的模型 同时进行I / O绑定任务。
现在我有一个这样的线程工作者
def worker(queue):
queue_full = True
while queue_full:
try:
url = queue.get(False)
w = Wappalyzer(url)
w.analyze()
queue.task_done()
except Queue.Empty:
queue_full = False
这里w.analyze()
做了两件事
requests
库pyv8
javascript库据我所知,1
是I / O绑定的,2
是CPU绑定的。
这是否意味着,GIL申请了2
而我的计划无法正常运作?
答案 0 :(得分:3)
GIL
描述没有说明正确性,只说效率。
如果2
受CPU限制,您将无法通过线程获得多核性能,但您的程序仍会正确执行 。
如果你关心CPU并行,你应该使用Python的multiprocessing
库。