#python #multiprocessing
Вопрос:
Я запускаю функцию, которая предназначена для возврата переменной словаря через звездные карты с несколькими входами. Однако, когда я печатаю конечный результат, полученный в результате многопроцессорной обработки, вместо этого я получаю переменную типа списка. Почему это происходит и есть ли обходной путь? Спасибо.
Пример:
from multiprocessing import Pool
def return_dict(keys, values):
dict =dict(zip(keys, values))
print(type(dict))
return dict
with Pool(3) as p:
output = p.starmap(return_dict, [(['name', 'age', 'nationality'], ['Bob', 17, 'Korean']),
(['price', 'fruit', 'drink'], [20, 'banana', 'juice']),
(['color1', 'color2', 'color3'], ['red', 'blue', 'green']))
print(type(output))
Выход:
<class 'dict'>
<class 'dict'>
<class 'dict'>
<class 'list'>
Комментарии:
1. можете ли вы подробнее описать ожидаемый результат?
2. надеясь, что это будет переменная словаря, а не переменная списка
3. Распечатайте
output
себя — это, скорее всего, список этих словарей4. В этом-то и была проблема, спасибо! Просто нужно просмотреть список, чтобы получить словари
Ответ №1:
Вы можете получить желаемый результат следующим образом. Также я советую выполнять такие простые операции в одном процессе и не использовать Pool
from multiprocessing import Pool
def return_dict(keys, values):
# use dictionary comprehension to create dictionary
_dict = {keys[i]: values[i] for i in range(len(keys))}
print(type(_dict))
return _dict
if __name__ == '__main__':
data = [
(
['name', 'age', 'nationality'],
['Bob', 17, 'Korean'],
),
(
['price', 'fruit', 'drink'],
[20, 'banana', 'juice'],
),
(
['color1', 'color2', 'color3'],
['red', 'blue', 'green'],
)
]
with Pool(3) as p:
output = p.starmap(return_dict, data)
for j in output:
print(j)
Комментарии:
1. Спасибо, это был всего лишь упрощенный пример