Python多进程--数据共享

1,128 阅读1分钟
原文链接: blog.csdn.net

多进程数据共享:

多进程模块: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
<Synchronized wrapper for c_double(10.0)>
10.7

其中数值型可选的数据类型如下(代码中为multiprocessing.Value(‘d’, 10.0),是double)
这里写图片描述

若要传递字符串,则代码如下:(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'
<Synchronized wrapper for c_char_p(139944663358672)>
b'a'

类型如下:
这里写图片描述
数组型实例:

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]

参考:
blog.csdn.net/houyanhua1/…