一尘不染

了解python GIL-I / O绑定vs CPU绑定

python

来自python线程文档

在CPython中,由于使用了全局解释器锁,因此只有一个线程可以一次执行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()做两件事

  1. 使用requests库抓取网址
  2. 使用pyv8JavaScript库分析抓取的html

据我所知,1是受I / O约束和2受CPU约束的。

这是否表示已申请GIL 2,但我的程序无法正常运行?


阅读 250

收藏
2021-01-20

共1个答案

一尘不染

GIL描述没有提及任何正确性,仅涉及效率。

如果2受CPU限制,您将无法从线程中获得多核性能,但是您的程序仍将 正确 执行。

如果您关心CPU并行性,则应该使用Python的multiprocessing库。

2021-01-20