来自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()做两件事
w.analyze()
requests
pyv8
据我所知,1是受I / O约束和2受CPU约束的。
1
2
这是否表示已申请GIL 2,但我的程序无法正常运行?
该GIL描述没有提及任何正确性,仅涉及效率。
GIL
如果2受CPU限制,您将无法从线程中获得多核性能,但是您的程序仍将 正确 执行。
如果您关心CPU并行性,则应该使用Python的multiprocessing库。
multiprocessing