【问题标题】:Python Multiprocessing Array initializationPython 多处理数组初始化
【发布时间】:2014-12-18 11:43:48
【问题描述】:

我正在尝试使用进程数组来跨多个进程使用数组结构,但似乎无法初始化 the example

from multiprocessing import Process, Lock
from multiprocessing.sharedctypes import Value, Array
from ctypes import Structure, c_double,c_char_p

class Point(Structure):
    _fields_ = [('x', c_double), ('y', c_double)]

class Call(Structure):
    _fields_ = [('participantId',c_char_p)]

def modify(n,s):
    n.value **= 2
    #x.value **= 2
    s.value = s.value.upper()
    #for a in A:
    #    a.x **= 2
    #    a.y **= 2

if __name__ == '__main__':
    lock = Lock()

    n = Value('i', 7)
   #x = Value(c_double, 1.0/3.0, lock=False)
    s = Array('c', 'hello world', lock=lock)
    A = Array(Call,['ebtirgnm-sqr7-h2fd-wa80-baoctu684qma'], lock=lock)
   #A = Array(Point, [(1.875,-6.25), (-5.75,2.0), (2.375,9.5)], lock=lock)

    p = Process(target=modify, args=(n,s))
    p.start()
    p.join()

    print n.value
  #  print x.value
    print s.value

在这一行中使用调用对象初始化我的数组时出现错误:

A = Array(Call,['ebtirgnm-sqr7-h2fd-wa80-baoctu684qma',], lock=lock)


/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python /Users/gogasca/Documents/OpenSource/Development/Python/tpsEmulator/tpsEmulator/tools/Array.py
Traceback (most recent call last):
  File "/Users/gogasca/Documents/OpenSource/Development/Python/tpsEmulator/tpsEmulator/tools/Array.py", line 25, in <module>
    A = Array(Call,['1'], lock=lock)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/sharedctypes.py", line 115, in Array
    obj = RawArray(typecode_or_type, size_or_initializer)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/sharedctypes.py", line 89, in RawArray
    result.__init__(*size_or_initializer)
TypeError: expected Call instance, got str

我试过了:

  call1 = Call(["1"])
  ['1',]
  [('1')]
  [0]

运气不好

【问题讨论】:

    标签: python process python-multiprocessing


    【解决方案1】:

    这里有错误:

    A = Array(Call,['ebtirgnm-sqr7-h2fd-wa80-baoctu684qma'], lock=lock)
    

    Python 将字符串解释为对象,而不是参数。 应该是:

    A = Array(Call,[('ebtirgnm-sqr7-h2fd-wa80-baoctu684qma',)], lock=lock)
    

    然后python会将其解释为参数。 示例中存在相同的错误:

    call1 = Call(["1"])
    ['1',]
    [('1')]
    [0]
    

    让我们来看看python对最后一个逗号的看法:

    >>> print [('1')]
    ['1']
    >>> print [('1',)]
    [('1',)]
    

    【讨论】:

      猜你喜欢
      • 2016-11-21
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 2021-06-03
      • 2012-04-14
      • 2015-12-01
      • 1970-01-01
      • 2015-08-01
      相关资源
      最近更新 更多