多进程数据共享:
多进程模块: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)
若要传递字符串,则代码如下:(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'复制代码
类型如下:
数组型实例:
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]复制代码