Manager können die Multiprocessing Values halten, die wiederum Instanzen des Typs c_char_p vom ctypes Modul halten:
>>> import multiprocessing
>>> import ctypes
>>> v = multiprocessing.Value('c', "Hello, World!")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/multiprocessing/__init__.py", line 253, in Value
return Value(typecode_or_type, *args, **kwds)
File "/usr/lib/python2.7/multiprocessing/sharedctypes.py", line 99, in Value
obj = RawValue(typecode_or_type, *args)
File "/usr/lib/python2.7/multiprocessing/sharedctypes.py", line 73, in RawValue
obj.__init__(*args)
TypeError: one character string expected
>>> cstring = multiprocessing.Value(ctypes.c_char_p, "Hello, World!")
>>> cstring
<Synchronized wrapper for c_char_p(166841564)>
>>> cstring.value
'Hello, World!'
Siehe auch: Post with the original solution, dass ich eine harte Zeit zu finden hatte.
So kann ein Manager verwendet werden, wie dies eine Zeichenfolge unter mehreren Prozessen in Python zu teilen:
>>> from multiprocessing import Process, Manager, Value
>>> from ctypes import c_char_p
>>>
>>> def greet(string):
>>> string.value = string.value + ", World!"
>>>
>>> if __name__ == '__main__':
>>> manager = Manager()
>>> string = manager.Value(c_char_p, "Hello")
>>> process = Process(target=greet, args=(string,))
>>> process.start()
>>> process.join()
>>> print string.value
'Hello, World!'
Ich fragte mich, warum das funktioniert (teilen einen Zeiger), und aus den Quellen habe ich gelernt, dass 'managers.Value' nicht tatsächlich das' typecode' Argument überhaupt verwendet. Die Zeichenfolge wird nicht in 'c_char_p' konvertiert. 'multiprocessing.Value' funktioniert sehr unterschiedlich. –