我们打开程序后,会发现电脑的内存和cpu发生了变化。在对于前者上面,自然是希望内容占用小,cpu的利用越高越好。那有没有什么方法可以让我们的cpu达到满状态的运行效果呢?这就得用到我们所学的多线程中的知识了,再正式开始讲解之前,我们先来说说操作的思路吧,然后进行代码对比。

我们都知道,比方我有一个4核的cpu,那么这样一来,在单位时间内每个核只能跑一个线程,然后时间片轮转切换。但是python不一样,它不管你有几个核,单位时间多个核只能跑一个线程,然后时间片轮转。看起来很不可思议?但是这就是gil搞的鬼。任何python线程执行前,必须先获得gil锁,然后,每执行100条字节码,解释器就自动释放gil锁,让别的线程有机会执行。这个gil全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在python中只能交替执行,即使100个线程跑在100核cpu上,也只能用到1个核。通常我们用的解释器是官方实现的cpython,要真正利用多核,除非重写一个不带gil的解释器。我们不妨做个试验:

#coding=utf-8
from multiprocessing import pool
from threading import thread
from multiprocessing import process
def loop():
  while true:
    pass
if __name__ == '__main__':
  for i in range(3):
    t = thread(target=loop)
    t.start()
  while true:
    pass

我的电脑是4核,所以我开了4个线程,看一下cpu资源占有率:

 

我们发现cpu利用率并没有占满,大致相当于单核水平。

而如果我们变成进程呢?

我们改一下代码:

#coding=utf-8
from multiprocessing import pool
from threading import thread
from multiprocessing import process
def loop():
  while true:
    pass
if __name__ == '__main__':
  for i in range(3):
    t = process(target=loop)
    t.start()
    pass

结果直接飙到了100%,说明进程是可以利用多核的!

以上就是python3爬虫gil修改多线程实例讲解的详细内容,更多关于python3爬虫中的gil修改多线程的资料请关注www.887551.com其它相关文章!