Gir*_*iri 3 python multithreading gil
来自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
Run Code Online (Sandbox Code Playgroud)
这里w.analyze()做两件事
requests使用库抓取 urlpyv8使用javascript 库分析抓取的 html据我所知,1是 I/O 限制,2也是 CPU 限制。
这是否意味着,申请了GIL 2,我的程序将无法正常运行?
该GIL描述没有提到任何关于正确性的内容,只提到效率。
如果2受 CPU 限制,您将无法从线程中获得多核性能,但您的程序仍将正确执行。
如果你关心CPU并行性,你应该使用Python的multiprocessing库。
| 归档时间: |
|
| 查看次数: |
5001 次 |
| 最近记录: |