当前位置:首页 > 科技  > 软件

Python多线程编程全解析:基础到高级用法

来源: 责编: 时间:2024-03-27 09:24:24 106观看
导读Python中有多线程的支持。Python的threading模块提供了多线程编程的基本工具。在下面,我将列举一些基础的多线程用法和一些高级用法,并提供相应的源代码,其中包含中文注释。基础用法:创建和启动线程import threadingimpor

2AN28资讯网——每日最新资讯28at.com

Python中有多线程的支持。Python的threading模块提供了多线程编程的基本工具。在下面,我将列举一些基础的多线程用法和一些高级用法,并提供相应的源代码,其中包含中文注释。2AN28资讯网——每日最新资讯28at.com

基础用法:

创建和启动线程

import threadingimport time# 定义一个简单的线程类class MyThread(threading.Thread):    def run(self):        for _ in range(5):            print(threading.current_thread().name, "is running")            time.sleep(1)# 创建两个线程实例thread1 = MyThread(name="Thread-1")thread2 = MyThread(name="Thread-2")# 启动线程thread1.start()thread2.start()# 主线程等待所有子线程结束thread1.join()thread2.join()print("Main thread exiting")

线程同步 - 使用锁

import threading# 共享资源counter = 0# 创建锁counter_lock = threading.Lock()# 定义一个简单的线程类class MyThread(threading.Thread):    def run(self):        global counter        for _ in range(5):            with counter_lock:  # 使用锁保护临界区                counter += 1                print(threading.current_thread().name, "Counter:", counter)# 创建两个线程实例thread1 = MyThread(name="Thread-1")thread2 = MyThread(name="Thread-2")# 启动线程thread1.start()thread2.start()# 主线程等待所有子线程结束thread1.join()thread2.join()print("Main thread exiting")

高级用法:

使用线程池

import concurrent.futuresimport time# 定义一个简单的任务函数def task(name):    print(f"{name} is running")    time.sleep(2)    return f"{name} is done"# 使用线程池with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:    # 提交任务给线程池    future_to_name = {executor.submit(task, f"Thread-{i}"): f"Thread-{i}" for i in range(5)}    # 获取任务结果    for future in concurrent.futures.as_completed(future_to_name):        name = future_to_name[future]        try:            result = future.result()            print(f"{name}: {result}")        except Exception as e:            print(f"{name}: {e}")

使用Condition进行线程间通信

import threadingimport time# 共享资源shared_resource = None# 创建条件变量condition = threading.Condition()# 定义一个写线程class WriterThread(threading.Thread):    def run(self):        global shared_resource        for _ in range(5):            with condition:                shared_resource = "Write data"                print("Writer wrote:", shared_resource)                condition.notify()  # 通知等待的线程                condition.wait()  # 等待其他线程通知# 定义一个读线程class ReaderThread(threading.Thread):    def run(self):        global shared_resource        for _ in range(5):            with condition:                while shared_resource is None:                    condition.wait()  # 等待写线程通知                print("Reader read:", shared_resource)                shared_resource = None                condition.notify()  # 通知写线程# 创建写线程和读线程writer_thread = WriterThread()reader_thread = ReaderThread()# 启动线程writer_thread.start()reader_thread.start()# 主线程等待所有子线程结束writer_thread.join()reader_thread.join()print("Main thread exiting")

这些例子涵盖了一些基础和高级的多线程用法。请注意,在Python中由于全局解释器锁(GIL)的存在,多线程并不能充分利用多核处理器。如果需要充分利用多核处理器,可以考虑使用multiprocessing模块进行多进程编程。2AN28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-79601-0.htmlPython多线程编程全解析:基础到高级用法

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 面试官:只知道v-model是modelValue语法糖,那你可以走了

下一篇: Vue3-Emoji-Picker一款基于Vue3的emoji表情选择器深度解析与实践

标签:
  • 热门焦点
  • 十个可以手动编写的 JavaScript 数组 API

    十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 三言两语说透柯里化和反柯里化

    三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • 2023年,我眼中的字节跳动

    2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的“头腾
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 网红炒股不为了赚钱,那就是耍流氓!

    网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就“胡锡进炒股是否知道认真报道”展开讨论。有
  • 华为HarmonyOS 4.0将于8月4日发布 或搭载AI大模型技术

    华为HarmonyOS 4.0将于8月4日发布 或搭载AI大模型技术

    华为宣布HarmonyOS4.0将于8月4日正式发布。此前,华为已经针对开发者公布了HarmonyOS4.0,以便于开发者提前进行适配,也因此被曝光出了一些新系统的特性
  • AI芯片初创公司Tenstorrent获三星和现代1亿美元投资

    AI芯片初创公司Tenstorrent获三星和现代1亿美元投资

    Tenstorrent是一家由芯片行业资深人士Jim Keller领导的加拿大初创公司,专注于开发人工智能芯片,该公司周三表示,已经从现代汽车集团和三星投资基金等
  • iQOO Neo8系列或定档5月23日:首发天玑9200+ 安卓跑分王者

    iQOO Neo8系列或定档5月23日:首发天玑9200+ 安卓跑分王者

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
Top
Baidu
map