python多进程实现数据共享的示例代码

2025-01-16 04:50

本文主要是介绍python多进程实现数据共享的示例代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以...

背景

 安卓ui自动化框架,使用的是多进程实现的多设备并行。而在捞取数据做数据汇总时,需要多进程可以数据共享。

进程、进程创建

程序编写完没有运行称之为程序。正在运行的代码就是进程。在python3语言中,对多进程支持的是multiprocessing模块和subprocess模块。multiprocessing模块为在子进程中运行任务、通讯和共享数据,以及执行各种形式的同步提供支持。

Python提供了非常好用www.chinasem.cn的多进程包multiprocessing,只需要定义一个函数,Python会完成其他所有事情。借助这个包,可以轻松完成从单进程到并发执行的转换。multiprocessing支持子进程、通信和共享数据。语法格式如下:

Process([group [, target [, name [, args [, kwargs]]]]])

进程间通信

多线程:共享变量很简单,直接定义全局 global 变量即可

多进程:全局变量在多个进程中不共享,进程之间的数据是独立的,默认情况下互不影响。

from multiprocessing import Process
num=1
def work1():
    global num
    num+=5
    print('子进程1运行,num:',num)

def work2():
    global num
    num += 10
    print('子进程2运行,num:',num)


if __name__=='__main__':
    print('父进程开始运行')
    p1=Process(target=work1)
    p2=Process(target=work2)
    p1.start()
    p2.start()
    p1.join()
    p2.join()

 执行结果

父进程开始运行
子进程1运行,num:6
子进程2运行,num:11

  • 但是python也提供了这样的标准库。process进程的manager模块和pool进程的manager模块。 

 进程间共享数据

  • 共享数值型数据

主进程与子进程共用一个value

import multiprocessing


def func(num):
    num.value = 2  


if __name__ == "__main__":
    num = multiprocessing.Value("d", 1) 
    p = multiprocessing.Process(target=func, args=(num,))
    p.start()
    p.join()
  •  共享数组型数据

子进程改变dict,list,主进程dict,list跟着改变

共享list实践

现在想把每个手机的自动化运行结果的元组拿出来分析,使用共享list的方式

# 多进程中,同一个变量,各自有一份拷贝存在于每个进程中, 互不影响;
    # 多线程中,所有变量都由所有线程共享,任何一个变量都可以被任何一个线程修改.
    # multiprocessing.Manager()实现多进程中的数据共享
    RESULT_TIMEPARAM = multiprocessing.Manager().list()
    RESULT_REPORT_NAME_LIST = multiprocessing.Manager().list()
    RESULT_TUPLE_LIST = multiprocessing.Manager().list()
    devices_pool = []
    for tmp_udid in ConfigData().mobile_data().keys():
        devices_pool.appe编程nd(multiprocessing.Process(target=run_testcase, args=(tmp_udid,RESULT_TIMEPARAM,RESULT_REPORT_NAME_LIST,
                                                                               RESULT_TUPLE_LIST )))

    for devices_udid in devices_pool:
        devices_udid.start()

    for devices_udid in devices_pool:
        devices_udid.join()

得到的RESULT_TUPLE_LIST:

[('2022-10-11 09:59:46', '共 1,通过 1,通过率= 100.00%', 'android', '7.1.2http://www.chinasem.cn', 'samsung', '3.9.3.018'), www.chinasem.cn('2022-10-11 09:59:47', '共 1,通过 1,通过率= 100.00%', 'Android', '10', 'China编程OPPO', '3.9.3.018')]

到此这篇关于python多进程实现数据共享的示例代码的文章就介绍到这了,更多相关python多进程数据共享内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于python多进程实现数据共享的示例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153073

相关文章

Java StringBuilder 实现原理全攻略

《JavaStringBuilder实现原理全攻略》StringBuilder是Java提供的可变字符序列类,位于java.lang包中,专门用于高效处理字符串的拼接和修改操作,本文给大家介绍Ja... 目录一、StringBuilder 基本概述核心特性二、StringBuilder 核心实现2.1 内部

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践