python的多线程和多进程程序编程

CPU密集型使用多进程,IO密集型使用多线程

查看进程ID和线程ID的命令分别是os.getpid()和threading.current_thread()

多进程使用multiprocessing就可以了,通常使用进程池来完成操作,阻塞主进程使用join方法

多线程使用threading模块,线程池使用concurrent.futures模块,同时主线程的阻塞方法有多种

不管多进程还是多线程,生产消费模型都可以用队列来完成,如果要用多线程操作同一变量记得加锁

多进程

import multiprocessing

import time

def func1():

for i in range(5):

print(f"进程1:{i}")

time.sleep(1)

def func2():

for i in range(5):

print(f"进程2:{i}")

time.sleep(1)

if __name__ == '__main__':

p1 = multiprocessing.Process(target=func1) 创建一个进程

p2 = multiprocessing.Process(target=func2)创建一个进程

p1.start()

p2.start()

p1.join()

p2.join()

多线程

import threading
import time

def func1():
    for i in range(5):
        print(f"线程1:{i}")
        time.sleep(1)

def func2():
    for i in range(5):
        print(f"线程2:{i}")
        time.sleep(1)

t1 = threading.Thread(target=func1) 创建一个线程
t2 = threading.Thread(target=func2) 创建一个线程
t1.start()
t2.start()
t1.join()
t2.join()

import multiprocessing

def func1(x):

return x * x

if __name__ == '__main__':

pool = multiprocessing.Pool(processes=4) 进程池

results = pool.map(func1, [1, 2, 3, 4, 5])

print(results)

import concurrent.futures

def func1(x):

return x * x

executor = concurrent.futures.ThreadPoolExecutor(max_workers=4) 线程池

futures = [executor.submit(func1, x) for x in [1, 2, 3, 4, 5]]

for future in futures:

print(future.result())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第十五天

LeetCode题目: 654. 最大二叉树617. 合并二叉树700. 二叉搜索树中的搜索98. 验证二叉搜索树2843. 统计对称整数的数目 其他: 今日总结 往期打卡 654. 最大二叉树 跳转: 654. 最大二叉树 学习: 代码随想录公开讲解 问题: 给定一个不重复的整数数组 nums 。 最大二叉树 可以用…

[GN] Uart协议解码器源码各个方法

系列文章目录 sigrokdecode 模块学习指南 — 准备阶段 通讯协议 - Uart sigrokdecode 模块 UART协议解码器源码解析 Uart协议解码器源码各个方法 文章目录 系列文章目录引入库parity_ok注解类型枚举options参数annotations 注解annotation_rows 注解分组接收(RX&a…

技术分享|iTOP-RK3588开发板Ubuntu20系统旋转屏幕方案

iTOP-3588开发板采用瑞芯微RK3588处理器,是全新一代AloT高端应用芯片,采用8nmLP制程,搭载八核64位CPU,四核Cortex-A76和四核Cortex-A55架构,主频高达2.4GHz。是一款可用于互联网设备和其它数字多媒体的高性能产品。 在…

Unity IL2CPP内存泄漏追踪方案(基于Memory Profiler)技术详解

一、IL2CPP内存管理特性与泄漏根源 1. IL2CPP内存架构特点 内存区域管理方式常见泄漏类型托管堆(Managed)GC自动回收静态引用/事件订阅未取消原生堆(Native)手动管理非托管资源未释放桥接层GCHandle/PInvoke跨语言引用未正确释放 对惹,这里有一个游戏开发交流小组…

消融实验_草稿

五列数据 \begin{table}[htbp]\caption{Performance Comparison of Standalone KD Variants vs MIRKD-enhanced Variants on ACNE04 Dataset\label{AblationKD}}\centering\renewcommand{\arraystretch}{1.2}\scriptsize\begin{tabularx}{\linewidth}{{}l *{3}{>{\centering…

面向对象高级(1)

文章目录 final认识final关键字修饰类:修饰方法:修饰变量final修饰变量的注意事项 常量 单例类什么是设计模式?单例怎么写?饿汉式单例的特点是什么?单例有啥应用场景,有啥好处?懒汉式单例类。 枚举类认识枚…

不用额外下载jar包,idea快速查看使用的组件源码

以nacos为例子,在idea中引入了nacos依赖,就可以查看源码了。 2. idea选择open(不关闭项目直接选择file-open也可以), 在maven的仓库里找到对应的包,打开 2.idea中选择 jar包,选择 add as library 3.这样j…

小白学习java第12天:IO流之缓冲流

1.IO缓冲流: 之前我们学习的都是原始流(FileInputStream字节输入流、FileOutputStream字节输出流、FIleReader字符输入流、FIleWriter字符输出流)其实我们可以知道对于这些其实性能都不是很好,要么太慢一个一个,要么就…

高速电路设计概述

1.1 低速设计和高速设计的例子 本节通过一个简单的例子,探讨高速电路设计相对于低速电路设计需要考虑哪些不同的问题。希望读者通过本例,对高速电路设计建立一个表象的认识。至于高速电路设计中各方面的设计要点,将在后续章节展开详细的讨论…

MySQL8.0.31安装教程,附pdf资料和压缩包文件

参考资料:黑马程序员 一、下载 点开下面的链接:https://dev.mysql.com/downloads/mysql/ 点击Download 就可以下载对应的安装包了, 安装包如下: 我用夸克网盘分享了「mysql」,链接:https://pan.quark.cn/s/ab7b7acd572b 二、解…

在Java项目中,引入【全局异常处理器】

目录 一.为什么引入全局异常处理器(目前项目碰到了什么问题)? 1.问题描述 2.与预期的差别 3.解决方案 二.解决上述问题 1.定义【业务异常类】 2.在serviceImpl层,手动抛出【违反唯一性约束】这个异常 3.定义【全局异常处理…

newspaper公共库获取每个 URL 对应的新闻内容,并将提取的新闻正文保存到一个文件中

示例代码: from newspaper import Article from newspaper import Config import json from tqdm import tqdm import os import requestswith open(datasource/api/news_api.json, r) as file:data json.load(file)print(len(data)) save_path datasource/sourc…

前端核心知识:Vue 3 编程的 10 个实用技巧

文章目录 1. **使用 ref 和 reactive 管理响应式数据**原理解析代码示例注意事项 2. **组合式 API(Composition API)**原理解析代码示例优势 3. **使用 watch 和 watchEffect 监听数据变化**原理解析代码示例注意事项 4. **使用 provide 和 inject 实现跨…

【Web API系列】XMLHttpRequest API和Fetch API深入理解与应用指南

前言 在现代Web开发中,客户端与服务器之间的异步通信是构建动态应用的核心能力。无论是传统的AJAX技术(基于XMLHttpRequest)还是现代的Fetch API,它们都为实现这一目标提供了关键支持。本文将从底层原理、核心功能、代码实践到实…

[特殊字符] Spring Boot 日志系统入门博客大纲(适合初学者)

一、前言 📌 为什么日志在项目中如此重要? 在开发和维护一个后端系统时,日志就像程序运行时的“黑匣子”,帮我们记录系统的各种行为和异常。一份良好的日志,不仅能帮助我们快速定位问题,还能在以下场景中…

IP协议之IP,ICMP协议

1.因特网中的主要协议是TCP/IP,Interneet协议也叫TCP/IP协议簇 2.ip地址用点分十进制表示,由32位的二进制表示,两部分组成:网络标识主机标识 3.IP地址分类; A:0.0.0.0-127.255.255.255 B:128.0.0.0-191.255.255.25…

GPIO_ReadInputData和GPIO_ReadInputDataBit区别

目录 1、GPIO_ReadInputData: 2、GPIO_ReadInputDataBit: 总结 GPIO_ReadInputData 和 GPIO_ReadInputDataBit 是两个函数,通常用于读取微控制器GPIO(通用输入输出)引脚的输入状态,特别是在STM32系列微控制器中。它们之间的主要…

洛古B4158 [BCSP-X 2024 12 月小学高年级组] 质数补全(线性筛/dfs)

B4158 [BCSP-X 2024 12 月小学高年级组] 质数补全 - 洛谷 思路1:线性筛,字符串匹配,枚举 质数筛选 要解决这个问题,首先得找出指定范围内(这里是 1 到 10000000)的所有质数。常用的质数筛选算法有埃拉托斯特尼筛法(埃氏筛&#…

一周学会Pandas2 Python数据处理与分析-Pandas2读取Excel

锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Excel格式文件是办公使用和处理最多的文件格式之一,相比CSV文件,Excel是有样式的。Pandas2提…

NVIDIA H100 vs A100:新一代GPU架构性能对比分析

一、核心架构演进对比 ‌Ampere架构(A100)‌采用台积电7nm工艺,集成540亿晶体管,配备6,912个CUDA核心和432个第三代Tensor Core,支持FP16、TF32和INT8精度计算。其显存子系统采用HBM2e技术,80GB版本带宽可…