python多进程,通过内存共享来通信,使用进程锁来防止数据问题

news/2024/12/25 20:40:36/文章来源:https://www.cnblogs.com/xuxiaobo/p/18631371

代码:

import multiprocessing
import time'''
使用锁和multiprocessing.Value,multiprocessing.Array,multiprocessing.Manager().list
'''
def worker1(shared_number1, lock):for _ in range(10):with lock:shared_number1.value += 1def worker2(shared_array1, lock):for i in range(len(shared_array1)):with lock:shared_array1[i] += 1'''
不使用锁
'''
shared_number2 = 0
shared_array2 = [0,1,2,3,4,5,6,7,8,9]def worker11():global shared_number2for _ in range(10):shared_number2 += 1time.sleep(1)def worker22():global shared_array2for i in range(len(shared_array2)):shared_array2[i] += 1time.sleep(1)if __name__ == '__main__':shared_number1 = multiprocessing.Value('i', 0)shared_array1 = multiprocessing.Array('i', [0,1,2,3,4,5,6,7,8,9])lock1 = multiprocessing.Lock()lock2 = multiprocessing.Lock()processes1 = []for _ in range(100):p = multiprocessing.Process(target=worker1, args=(shared_number1, lock1))processes1.append(p)p.start()processes2 = []for _ in range(100):p = multiprocessing.Process(target=worker2, args=(shared_array1, lock2))processes2.append(p)p.start()for p in processes1:p.join()for p in processes2:p.join()print('使用锁的情况下:')print(f"最终的共享数字是: {shared_number1.value}")print(shared_array1[:])print()processes11 = []for _ in range(100):p = multiprocessing.Process(target=worker11, args=())processes11.append(p)p.start()processes22 = []for _ in range(100):p = multiprocessing.Process(target=worker22, args=())processes22.append(p)p.start()for p in processes11:p.join()for p in processes22:p.join()#time.sleep(5)print('不使用锁的情况下:')print(f"最终的共享数字是: {shared_number2}")print(shared_array2[:])

 

import multiprocessingdef calculate_squares(numbers, shared_list):for n in numbers:shared_list.append(n * n)def calculate_cubes(numbers, cube_list):for n in numbers:cube_list.append(n * n * n)if __name__ == "__main__":# 创建Manager对象manager = multiprocessing.Manager()square_list = manager.list()  # 共享平方列表cube_list = manager.list()     # 共享立方列表numbers = [1, 2, 3, 4, 5]# 创建进程,启动进程process1 = multiprocessing.Process(target=calculate_squares, args=(numbers, square_list))process2 = multiprocessing.Process(target=calculate_cubes, args=(numbers, cube_list))process1.start()process1.join()  # 等待进程结束process2.start()process2.join()  # 等待进程结束print("共享平方结果:", list(square_list))print("共享立方结果:", list(cube_list))

 

输出:

使用锁的情况下:
最终的共享数字是: 1000
[100, 101, 102, 103, 104, 105, 106, 107, 108, 109]不使用锁的情况下:
最终的共享数字是: 0
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

共享平方结果: [1, 4, 9, 16, 25]
共享立方结果: [1, 8, 27, 64, 125]

 

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

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

相关文章

Jenkins入门使用

Jenkins入门使用 1先安装jdk才能运行jenkins yum install -y java-1.8.0-openjdk.x86_642 安装jenkins,运行,进行端口绑定,启动jenkins docker search jenkins docker pull jenkins/jenkins docker run -d -u root -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/j…

Java 泛型详细解析

本文将带你详细解析 Java 泛型,了解泛型的原理、常见的使用方法以及泛型的局限性,让你对泛型有更深入的了解。泛型的定义 泛型类的定义 下面定义了一个泛型类 Pair,它有一个泛型参数 T。 public class Pair<T> {private T start;private T end; }实际使用的时候就可以…

javafx-请求篇

OkHttpClient 基本使用步骤如下构建客户端对象OkHttpClient 构建请求Request 生成Call对象 Call发起请求(同步/异步)import java.io.IOException; import okhttp3.Call; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Req…

javafx-一个小demo

懒得讲了,直接看代码吧 pox.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://m…

一个小demo

懒得讲了,直接看代码吧 pox.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://m…

一个 Bug JDK 居然改了十年?

你敢相信么一个简单的Bug,JDK 居然花了十年时间才修改完成。赶快来看看到底是个什么样的 Bug?问题现象 今天偶然看到了一个 JDK 的 Bug,给大家分享一下。 假设现在有如下的代码: List<String> list = new ArrayList<>(); list.add("1"); Object[] ar…

崩溃列表数据库查询(可供参考)

首先去https://weikezhijia.feishu.cn/sheets/BIvxsKZhHhzpC6tDyoLcPE50n4d?sheet=9ikXjx 看库中导出指标,然后可以查到是rum_error表,然后去ors_rum_test服务器,ors_rum_test数据库,rum_error表去查询,结合点击全部按钮后查看F12 然后查看preView里的字段,结合着去查rum…

流量分析练习

flag明文 题目:key.pcapng查找flag或者flag{,我们在下图查找到所需要的flag本类题目特点:能够在字节流中直接查找到带有flag的字符串,不存在加解密或转换等,属于明文形式 2.flag编码 题目:64da5a4a1e024d198dfa307299965b6d.pcapng本题考到十六进制编码 将flag转成十六进…

哪里有 class 告诉我?

说明 本文中的 JVM 参数和代码在 JDK 8 版本生效。 哪里有用户类? 用户类是由开发者和第三方定义的类,它是由应用程序类加载器加载的。 Java 程序可以通过CLASSPATH 环境变量,JVM 启动参数 -cp 或者 -classpath 指定用户需要加载的类的路径。这两个配置的优先级从低到高,后…

python多进程之间通讯,消息队列Queue

代码:from multiprocessing import Process, Queuedef producer(q):myinfo = "包子"q.put(myinfo)print(f"生产了{myinfo}")myinfo = "饺子"q.put(myinfo)print(f"生产了{myinfo}\n") 生产了4个,消费5个def consumer(q):print(f&q…

使用DBeaver连接带有Kerberos认证的hive(亲测可用)

先下载工具 https://yvioo.lanzn.com/isBg42j0fu7e里面是两个文件 一个jar包 一个安装包 首先点击kfw-4.1-amd64.msi 进行安装,建议直接默认配置安装 选择"TYPE" 安装完成后 点击 1、先配置环境变量 第一个变量名:KRB5_CONFIG 变量值: 这个就是Kerberos认证给的k…

【QTTabBar】批量去除当前文件夹的所有文件只读属性

使用方法参考: https://www.cnblogs.com/issacnew/p/18392262// 作者:博客园-issacnew // 网站:https://www.cnblogs.com/issacnew/p/18392262 // 作用:qttabbar去除当前文件夹下的所有文件只读属性,使得所有文件可读var qs = new ActiveXObject("QTTabBarLib.Script…