python数据多进程,Python多进程--数据共享

本文详细介绍了Python的multiprocessing模块在多进程数据共享中的应用,包括使用Value共享数值型数据,Array共享数组型数据,以及通过Manager共享字典和列表。示例代码展示了如何创建和修改这些共享数据类型,并展示了不同数据类型的实例和输出结果。
摘要由CSDN通过智能技术生成

多进程数据共享:

多进程模块:multiprocessing

import multiprocessing复制代码

共享数据类型: 数值型, 数组型,字典和列表(dict, list)

数值型: multiprocessing.Value()

数组型: multiprocessing.Array()

dict, list:

with multiprocessing.Manager() as MG:

复制代码

数值型实例:

def test_value_process():

num = multiprocessing.Value('d', 10.0)

print(num.value) #注意获得具体的值,输出为num.value

print(num)

p = multiprocessing.Process(target= func, args=(num,)) #注意有一个逗号

p.daemon = True

p.start()

p.join()

print(num.value)

if __name__ == '__main__':

test_value_process()

pass复制代码

输出:

10.0

10.7复制代码

其中数值型可选的数据类型如下(代码中为multiprocessing.Value(‘d’, 10.0),是double)

f8076298beefb6765258acd7d1e2ada8.png

若要传递字符串,则代码如下:(multiprocessing.Value(c_char_p, b’xxxx’))

from ctypes import c_char_p

def func_string(num):

num.value = b'a'

def test_string():

num = multiprocessing.Value(c_char_p, b'ss')

print(num.value)

print(num)

p = multiprocessing.Process(target=func_string, args=(num,))

# p.daemon = True

p.start()

p.join()

print(num.value)

if __name__ == '__main__':

#test_value_process()

#test_array()

#test_other()

test_string()复制代码

输出如下:

b'ss'

b'a'复制代码

类型如下:

55a45ed883b8aedda2aeb1fc29299681.png

数组型实例:

def func_array(num):

num[2] = 1

def test_array():

num = multiprocessing.Array('i', [1,2,3,4])

print(num[:])

p = multiprocessing.Process(target=func_array, args=(num,))

p.start()

p.join()

print(num[:])

if __name__ == '__main__':

#test_value_process()

test_array()复制代码

输出:

[1, 2, 3, 4]

[1, 2, 1, 4]

复制代码

字典,列表

def func_other(mydict, mylist):

mydict['aa'] = 1

mylist.append(2)

def test_other():

with multiprocessing.Manager() as mg:

mydict = mg.dict()

mylist = mg.list(range(5))

p = multiprocessing.Process(target=func_other,args=(mydict, mylist))

p.start()

p.join()

print(mydict)

print(mylist)

if __name__ == '__main__':

#test_value_process()

#test_array()

test_other()复制代码

输出:

{'aa': 1}

[0, 1, 2, 3, 4, 2]复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值