python GIL锁

Posted xiongsheng666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python GIL锁相关的知识,希望对你有一定的参考价值。

GIL锁

GIL 全局解释器(Global Interpreter lock), 是cpython 解释器特有的,让一个进程中同一个时刻只能有一个线程可以被CPU调用。

如果程序想利用计算机的多核优势,让cpu同时处理一些任务,适合用多进程开发(即使资源开销大)。

如果程序不利用计算机的多核优势,适合用多线程开发。

常见的程序开发中,计算机操作需要使用CPU多核优势,IO操作不需要利用CPU的多核优势
所有
1.计算密集型,用多进程,例如:大量的数据计算【累加计算示例】
2.IO密集型,用多线程,例如: 文件读写,网络数据传输【下载抖音视频示例】

累计计算示例(计算密集型):

  • 串行处理
"""进程和线程"""
import time

start = time.time()

result = 0
for i in range(100000):
    result += 1
print(result)

end = time.time()

# 耗时
print("耗时:", end - start)

  • 多进程处理
"""多进程处理"""
import time
import multiprocessing


def task(start, end, queue):
    result = 0
    for i in range(start, end):
        result += i
    queue.put(result)


if __name__ == '__main__':
    queue = multiprocessing.Queue()

    start_time = time.time()

    p1 = multiprocessing.Process(target=task, args=(0, 50000, queue))
    p1.start()
    p2 = multiprocessing.Process(target=task, args=(0, 60000, queue))
    p2.start()

    v1 = queue.get(block=True)
    v2 = queue.get(block=True)
    print((v1 + v2))
    end_time = time.time()
    print("耗时:", end_time - start_time)


当然 ,在程序开发中 多线程 和多进程 是可以结合在一起使用的
例如:创建2个进程(建议与CPU个数相同),每个进程中创建3个线程

""" 多线程多进程同时使用"""
import multiprocessing
import threading


def thread_task():
    print("8888888888888888888888888")


def task(start, end):
    t1 = threading.Thread(target=thread_task)
    t1.start()
    t2 = threading.Thread(target=thread_task)
    t2.start()
    t3 = threading.Thread(target=thread_task)
    t3.start()


if __name__ == '__main__':
    p1 = multiprocessing.Process(target=task, args=(0, 1000))
    p1.start()

    p2 = multiprocessing.Process(target=task, args=(50000, 2000))
    p2.start()

以上是关于python GIL锁的主要内容,如果未能解决你的问题,请参考以下文章

8第七周-网络编程-GIL锁介绍

117 GIL全局解释器锁

4月27日 python学习总结 GIL进程池线程池同步异步阻塞非阻塞

Python 之 GIL 全局解释器锁

python GIL锁

python GIL锁