数字类型打印会输出
2.11
2.11
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
字符串类型的就只能输出
ggggs
改成字符串类型的时候就变成执行了f里面的print就卡在那里了,等一会马上结束了。没有输出下面的内容,这个是怎么个逻辑呢。请教下各位大侠解释,代码如下:
这是数字类型的代码
from multiprocessing import Process, Value,Array
import ctypes
def f(n, a):
n.value=2.11
print(n.value)
for i in range(len(a)):
a[i] = -a[i]
if __name__ == '__main__':
num = Value('d',1.2)
arr = Array('i', range(10))
p = Process(target=f, args=(num, arr))
p.start()
p.join()
print(num.value)
print(arr[:])
字符类型的代码如下:
from multiprocessing import Process, Value,Array
import ctypes
def f(n, a):
n.value='ggggs'
print(n.value)
for i in range(len(a)):
a[i] = -a[i]
if __name__ == '__main__':
num = Value(ctypes.c_wchar_p,'ggg')
arr = Array('i', range(10))
p = Process(target=f, args=(num, arr))
p.start()
p.join()
print(num.value)
print(arr[:])
或者用
Array('u', 'gggg')
, 类似,但是没有raw
属性,也没有value
属性,[:]
切片即是string-----------update----------------
这得回想下C语言里字符串本质是什么(字符串数组), 所以你只共享个指针当然是有问题的
正确的做法是用 Array 传递 bytes (以下都针对py3)
主进程
子进程函数