本文主要是介绍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多进程实现数据共享的示例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!