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

相关文章

redis防止短信恶意调用的实现

《redis防止短信恶意调用的实现》本文主要介绍了在场景登录或注册接口中使用短信验证码时遇到的恶意调用问题,并通过使用Redis分布式锁来解决,具有一定的参考价值,感兴趣的可以了解一下... 目录1.场景2.排查3.解决方案3.1 Redis锁实现3.2 方法调用1.场景登录或注册接口中,使用短信验证码场

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

Redis 多规则限流和防重复提交方案实现小结

《Redis多规则限流和防重复提交方案实现小结》本文主要介绍了Redis多规则限流和防重复提交方案实现小结,包括使用String结构和Zset结构来记录用户IP的访问次数,具有一定的参考价值,感兴趣... 目录一:使用 String 结构记录固定时间段内某用户 IP 访问某接口的次数二:使用 Zset 进行

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

C++实现获取本机MAC地址与IP地址

《C++实现获取本机MAC地址与IP地址》这篇文章主要为大家详细介绍了C++实现获取本机MAC地址与IP地址的两种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实际工作中,项目上常常需要获取本机的IP地址和MAC地址,在此使用两种方案获取1.MFC中获取IP和MAC地址获取

使用PyQt实现简易文本编辑器

《使用PyQt实现简易文本编辑器》这篇文章主要为大家详细介绍了如何使用PyQt5框架构建一个简单的文本编辑器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录分析主窗口类 (MyWindow)菜单操作语法高亮 (SyntaxHighlighter)运行程序主要组件代码图示分析实现

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push