Я использую Python 2.6.5 в Ubuntu 8.10.
Для проекта, над которым я работаю, мне нужно запустить несколько процессов одновременно и сохранить каждый их вывод в свои соответствующие списки. Поскольку я не могу вернуть выходное значение непосредственно из процесса, я передаю выходной список в качестве аргумента моей целевой функции и добавляю выходные данные в этот список. Проблема в том, что когда я пытаюсь получить доступ к этому списку после запуска процесса, список все еще пуст. Ниже приведена упрощенная версия проблемы, а также сообщение об ошибке.
Код:
from multiprocessing import Process
import sys, math, os,commands
outputs = []
def calculate(a,b,outputs):
c = a*b
outputs.append(c)
#return c
outputs1 = []
p1 = Process(target = calculate, args = (2,3,outputs1))
p1.start()
p1.join()
print 'len(outputs1) = ' + str(len(outputs1))
print 'outputs1 = ' + str(outputs1[0])
Ошибка:
len(outputs1) = 0
Traceback (most recent call last):
File "append_test.py", line 23, in <module>
print 'outputs1 = ' + str(outputs1[0])
IndexError: list index out of range
Я пытаюсь сохранить каждый процесс полностью независимым от других, опасаясь повреждения данных. Я пытался использовать модуль Array из многопроцессорной обработки, но кажется, что append специфичен для списков. Когда я запускаю точно такой же код с потоком вместо процесса, я получаю желаемый результат без проблем, из-за чего я полагаю, что это проблема совместного использования памяти.