如何初始化字符串数组以进行多处理

2024-04-25 15:04:01 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是进程之间共享状态的示例代码

from multiprocessing import Process, Value, Array

def f(n, a):
    n.value = 3.1415927
    for i in range(len(a)):
        a[i] = -a[i]

if __name__ == '__main__':
    num = Value('d', 0.0)
    arr = Array('i', range(10))

    p = Process(target=f, args=(num, arr))
    p.start()
    p.join()

    print(num.value)
    print(arr[:])

输出是

^{pr2}$

我想用字符串元素而不是整数元素初始化一个列表。然后我想分配特定于列表的字符串元素。我的代码如下。在

from multiprocessing import Process, Value, Array

def f(a):
    a = ["up", "down", "left"]

if __name__ == '__main__':
    arr = Array('b', [])

    p = Process(target=f, args=(arr))
    p.start()
    p.join()

    print(arr[:])

我希望输出是

["up", "down", "left"]

但是我得到了输出

TypeError: f() missing 1 required positional argument: 'a'
[]

Tags: 代码fromimport元素ifvaluedefrange
2条回答

进程期望args是一个元组,而您只需传递arr。在

https://docs.python.org/2/library/multiprocessing.html

args is the argument tuple for the target invocation.

a = (arr)
print(type(a))
# Output: <class 'multiprocessing.sharedctypes.SynchronizedArray'>

a = (arr,)
print(type(a))
# Output: <type 'tuple'>

这样可以解决您的问题:

^{pr2}$

您需要传递一个参数元组,您需要添加一个尾部逗号来创建一个元组:

 p = Process(target=f, args=(arr,)) # <- trailing comma

或者显式使用元组:

^{pr2}$

逗号创建元组而不是parens。在

不知道多处理会有多大帮助,但要获得所需的输出:

from multiprocessing import Process, Value, Array
from ctypes import c_char_p
def f(a):
    a[:] = ["up", "down", "left"]


if __name__ == '__main__':
    arr = Array(c_char_p, 3)
    p = Process(target=f, args=(arr,))
    p.start()
    p.join()
    print(arr[:])
['up', 'down', 'left']

数组的第一个参数是我们在添加字符串时需要使用的类型ctypes.c_char_p,第二个参数是数组的大小,即3个元素。在

相关问题 更多 >