Я пытаюсь запустить многопроцессорную функцию и как-то хранить ее вывод в массиве, но не могу найти способ сделать это. Это то, что у меня до сих пор:Многопроцессорность Python: получение массива в команде многопроцессорности
resultsAr = []
inputData = [a,b,c,d]#THIS ARRAY CONTAINS DATA
def function(data):
values = [some_Number_1, some_Number_2]
resultsAr.append(values)
print ('Values = ', values) #THIS WORKS - THE CORRECT VALUES ARE PRINTED
print ('resultsAr = ', resultsAr) #WORKS AS WELL
def parallel_run(function, inputData): #a function that runs in multiple processors
cpu_no = 4
if len(inputData) < cpu_no:
cpu_no = len(inputData)
p = multiprocessing.Pool(cpu_no)
p.starmap_async(function, inputData, chunksize=1)
p.close()
p.join()
print ('resultsAr = ', resultsAr) # THIS PRINTS OUT AN EMPTY ARRAY!
parallel_run(function, inputData)
Это работает (по крайней мере, частично) Спасибо @Haldean Браун! НО - Как я могу распечатать/получить доступ к этим результатам сейчас? Кажется, что resultsAr больше не является списком, а «MapResult» (мне пришлось использовать функцию «starmap_async» вместо «карты». Не уверен, что это имеет значение). – Yair
Какую версию Python вы используете, и как вы импортируете многопроцессорность? Как документы, так и моя локальная установка Python согласны с тем, что 'pool.map' возвращает итерируемый (на моем компьютере, это список) –
Я использую' pool.starmap_async' вместо 'pool.map' (из-за характера моего функция). Я не мог найти никаких доказательств того, что 'starmap_async' является итерируемым или нет. Я использую python 3.5.1 с anaconda spyder 2.3.8 на ПК с Windows. импортировать путем импортной мультипроцессорности. – Yair