Я экспериментирую с многопроцессорной библиотекой Python (v. 3.8) для разработки более крупной программы и пытаюсь разделить строки multiprocessing.Array
между несколькими процессами, чтобы этот Array
можно было обновить и прочитать каждым процессом с одинаковыми данными. Я попытался c_char_p
, и он говорит, чтобы использовать byte
строки. Однако для этого кода:
from multiprocessing import Process, Array
from ctypes import c_char_p
def show(a):
print("This ran")
print("a: ", a[:])
if __name__ == "__main__":
array = Array(c_char_p, 1)
array[0] = b'Hello World'
print(array[:])
p = Process(target=show, args=(array,))
p.start()
p.join()
выходные данные варьируются от этого:
[b'Hello World']
This ran
a: [b'c']
до этого:
[b'Hello World']
This ran
но я ожидаю:
['Hello World']
This ran
['Hello World']
Полагаю, очевидным решением было бы совместное использование общего файла между каждым процессом, но я ожидаю использовать несколько массивов, и это может стать немного утомительным. Мне было интересно, что будет лучшим текущим решением для этого в Python 3.8.
Для этого кода:
from multiprocessing import Process, Array
from ctypes import c_char_p
def show(a):
print("This ran")
# Decode the encoded values
arr = [s.decode("utf-8") for s in a]
print(arr)
if __name__ == "__main__":
array = Array(c_char_p, 1)
message = b"Hello, world"
array[0] = message
p = Process(target=show, args=(array,))
p.start()
p.join()
# Decode the encoded values
arr = [s.decode("utf-8") for s in array]
print(arr)
оно никогда не заканчивается (т.е. никогда не попадает в оператор печати после процесса запускается), вывод:
This ran
Я не уверен, почему.