5个python多线程简单示例

news/2024/12/22 2:05:53/

示例 1: 基本线程创建

python"># 示例 1: 基本线程创建
import threading
import timedef print_numbers():for i in range(5):time.sleep(1)print(i)# 创建线程
thread = threading.Thread(target=print_numbers)# 启动线程
thread.start()# 等待线程完成(可选)
thread.join()print("Thread has finished execution.")

示例 2: 多个线程

python"># 示例 2: 多个线程
import threading
import timedef print_numbers(thread_name):for i in range(5):time.sleep(1)print("{}:{}".format(thread_name, i))# 创建并启动多个线程
threads = []
for i in range(3):thread = threading.Thread(target=print_numbers, args=("Thread-{}".format(i+1),))threads.append(thread)thread.start()# 等待所有线程完成
for thread in threads:thread.join()print("All threads have finished execution.")

示例 3: 使用线程锁

python"># 示例 3: 使用线程锁
import threadinglock = threading.Lock()
shared_resource = 0def increment_resource():global shared_resourcefor _ in range(100000):with lock:shared_resource += 1threads = []
for _ in range(10):thread = threading.Thread(target=increment_resource)threads.append(thread)thread.start()for thread in threads:thread.join()print("Final value of shared_resource:{}".format(shared_resource))

示例 4: 使用线程池

python"># 示例 4: 使用线程池
from concurrent.futures import ThreadPoolExecutordef print_numbers(n):for i in range(n):print(i)# 创建一个线程池,最多允许5个线程同时运行
with ThreadPoolExecutor(max_workers=5) as executor:# 提交任务到线程池futures = [executor.submit(print_numbers, 5) for _ in range(10)]# 等待所有任务完成(可选)for future in futures:future.result()print("All tasks have finished execution.")

示例 5: 线程间通信(使用队列)

python"># 示例 5: 线程间通信(使用队列)
"""
在这个示例中,我们使用了一个队列来在生产者线程和消费者线程之间进行通信。
生产者将项目放入队列中,而消费者从队列中取出项目进行处理。当生产者完成
生产后,它发送一个None作为结束信号给消费者,消费者收到信号后停止处理。
"""
import threading
import queue
import timedef producer(q):for i in range(5):item = "item-{}".format(i)q.put(item)print("Produced {}".format(item))def consumer(q):while True:item = q.get()# time.sleep(1)if item is None:# 使用None作为结束信号breakprint("Consumed {}".format(item))q.task_done()q = queue.Queue()producer_thread = threading.Thread(target=producer, args=(q,))
consumer_thread = threading.Thread(target=consumer, args=(q,))producer_thread.start()
consumer_thread.start()producer_thread.join()
q.put("None") # 发送结束信号给消费者
consumer_thread.join()print("All items have been produced and consumed.")


http://www.ppmy.cn/news/1533834.html

相关文章

AT89s51单片机和STC单片机烧录不同引脚问题

首先确定一下,两种烧录接口引脚不同 STC烧录器主要使用串口引脚 实际上stm32中也可以使用这种UART通信方式烧录程序,只是需要确定连接引脚进入bootloader模式 AT89S51来源Atmel公司,其中AVR单片机也是这个公司 ISP和SPI不是一个概念&…

c语言基础作业

选择题 1.1、以下选项中,不能作为合法常量的是 __________ A)1.234e04 B)1.234e0.4C)1.234e4 D)1.234e0 1.2、以下定义变量并初始化错误的是_____________。 A) char c1 ‘H’ ; B) char c1 9…

OpenCV视频I/O(3)视频采集类VideoCapture之获取当前使用的视频捕获 API 后端的名称函数getBackendName()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 getBackendName 函数是 OpenCV 中 VideoCapture 类的一个方法,用于获取当前使用的视频捕获 API 后端的名称。这可以帮助开发者了解当…

CMOS工艺-STI(浅沟槽隔离)

知识星球里的学员问:能介绍STI工艺吗?相比于LOCOS,STI工艺有哪些有点? 什么是STI工艺? 如上图,STI(Shallow Trench Isolation)浅沟槽隔离,先在硅片上刻蚀浅沟槽&#xf…

戴尔电脑怎么开启vt虚拟化_戴尔电脑新旧机型开启vt虚拟化教程

最近使用戴尔电脑的小伙伴们问我,戴尔电脑怎么开启vt虚拟。大多数可以在Bios中开启vt虚拟化技术,当CPU支持VT-x虚拟化技术,有些电脑会自动开启VT-x虚拟化技术功能。而大部分的电脑则需要在Bios Setup界面中,手动进行设置&#xff…

【音视频】ffmpeg其他常用过滤器filter实现(6-4)

最近一直在研究ffmpeg的过滤器使用,发现挺有意思的,这里列举几个个人感觉比较有用的过滤器filter,如下是代码实现,同样适用于命令行操作: 1、视频模糊:通过boxblur可以将画面进行模糊处理,第1个…

consul 介绍与使用,以及spring boot 项目的集成

目录 前言一、Consul 介绍二、Consul 的使用三、Spring Boot 项目集成 Consul总结前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是…

【递归】11. leetcode 129 求根节点到叶节点数字之和

1 题目描述 题目链接: 求根节点到叶节点数字之和 2 解答思路 第一步:挖掘出相同的子问题 (关系到具体函数头的设计) 第二步:只关心具体子问题做了什么 (关系到具体函数体怎么写,是一个宏观…