美文网首页
python编程基础33-内置库-多线程threading

python编程基础33-内置库-多线程threading

作者: 疯子李 | 来源:发表于2023-12-28 09:40 被阅读0次
# -*- coding: utf-8 -*-
# @Time    : 2023/5/8 19:46
# @Author  : yanfa
# @user   : yanfa 
# @File    : thread_.py
# @remark: 线程
# import threading
#
#
# def task2():
#     print("扔第二个苹果")
#
# def task3():
#     print("扔第三个苹果")
#
# def main():
# 创建线程
#     thread1=threading.Thread(target=task2)
# 启动线程
#     thread1.start()
#     thread2=threading.Thread(target=task3)
#     thread2.start()
#     print("扔第一个苹果")
#
# if __name__ == '__main__':
#     main()
#扔第二个苹果
# 扔第三个苹果
# 扔第一个苹果
import time

#GIL (Global Interpreter Lock) 是Python解释器的一个全局锁,它是为了保证在多线程情况下Python解释器的线程安全而引入的。
# 由于GIL的存在,Python的多线程并不能真正的并行执行,而是交替执行。这是因为在同一时刻,
# 只有一个线程能够拿到GIL,拥有GIL的线程才能在CPU上执行。当该线程执行完毕后,其他线程才有机会拿到GIL并执行
# def task():
#     time.sleep(5)
#
# def main():
#     start_time=time.time()
#     # 创建线程
#     thread1=threading.Thread(target=task)
#     # 启动线程start()
#     thread1.start()
#     thread2=threading.Thread(target=task)
#     thread2.start()
#     end_time=time.time()
#     # 注意主线程与从线程是轮训执行,不加等待线程执行join(),会忽略休眠的代码
#     thread1.join()
#     thread2.join()
#     print(end_time-start_time)


"""1、多线程并行执行计算密集型任务时,GIL会导致程序性能下降,因为每个线程都要抢夺GIL,而不是真正的并行执行任务。以下是一个计算密集型任务的示例:"""
# import threading

# def task():
#     s = 0
#     for i in range(100000000):
#         s += i
#
# threads = [threading.Thread(target=task) for i in range(4)]
#
# for t in threads:
#     t.start()
#
# for t in threads:
#     t.join()

""""在上面的示例中,我们创建了4个线程来执行计算密集型任务。但是由于GIL的存在,实际上这4个线程并不会真正的并行执行,而是交替执行。因此,当使用多线程来执行计算密集型任务时,无法利用多核CPU的优势。"""

"""2、多线程并行执行I/O密集型任务时,GIL不会对性能产生太大的影响,因为线程通常会在I/O操作中阻塞,释放GIL。以下是一个I/O密集型任务的示例:"""
import threading
import requests

def download(url):
    response = requests.get(url)
    print(len(response.content))

urls = [
    "https://www.google.com",
    "https://www.baidu.com",
    "https://www.github.com"
]

threads = [threading.Thread(target=download, args=(url,)) for url in urls]

for t in threads:
    t.start()

for t in threads:
    t.join()

"""在上面的示例中,我们创建了3个线程来下载三个不同的网页。由于下载任务是I/O密集型的,线程通常会在下载过程中阻塞,因此GIL不会对性能产生太大的影响。因此,当使用多线程来执行I/O密集型任务时,可以更好地利用CPU的多核优势。"""

相关文章

  • Python多线程

    Python内置库:threading(多线程操作) Python的线程操作在旧版本中使用的是thread模块,在...

  • python中的多线程只使用一个cpu核

    在python中使用threading多线程库编程要注意:threading并不会使用计算机的多cpu核,仍...

  • Python 并行编程

    多线程编程 Python 主要提供了包括thread、threading、Queue等多线程编程模块。thread...

  • python多线程编程

    python提供多线程编程模块有三个:thread、threading、Queen,主要使用threading模块...

  • day_18多线程

    1.threading python内置的threading模块,可以支持多线程 所有的进程默认都有一个线程(一般...

  • 18-笔记整理(多线程)

    threading python内置的threading模块,可以支持多线程 所有的进程默认都有一个线程(一般叫这...

  • Python多线程编程(一)

    1. threading模块 Python 实现多线程编程可以通过thread模块(thread模块在Python...

  • Python多进程与多线程编程及GIL详解!

    介绍如何使用python的multiprocess和threading模块进行多线程和多进程编程。 Python的...

  • Python 系统编程 进程与线程(2)

    1. 多线程-threading Python的标准库提供了两个模块:_thread和threading,_thr...

  • day18多线程

    多线程技术1 python内置的threading模块,可以支持多线程Thread:线程所有的进程默认都有一个线程...

网友评论

      本文标题:python编程基础33-内置库-多线程threading

      本文链接:https://www.haomeiwen.com/subject/gvjvgdtx.html