了解python GIL-I / O绑定vs CPU绑定
来自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()
做两件事
- 使用
requests
库抓取网址 - 使用
pyv8
JavaScript库分析抓取的html
据我所知,1
是受I / O约束和2
受CPU约束的。
这是否表示已申请GIL 2
,但我的程序无法正常运行?