1

Этот фрагмент кода относится действие параллельно к каждому элементу последовательности:Как выполнить действие, которое не возвращает ничего параллельного для каждого элемента в последовательности?

import multiprocessing 

... 
pool = multiprocessing.Pool(2) 
print(pool.map(action, sequence)) 

Как запустить действие параллельно, игнорируя при этом его результат (или, если он не возвращает ничего)? Нужно ли мне это делать, как в приведенном ниже фрагменте кода, который работает, но не подходит мне, или есть более элегантный метод?

import multiprocessing 

... 
pool = multiprocessing.Pool(2) 
list(pool.map(action, sequence))) # Don't assign the result to a variable, since 
            # it will be just a list of `None`. 

Другими словами, как я это делаю, но параллельно:

for c in sequence: 
    action(c) 
+0

'multiprocessing.Pool.map' сам моделирует функцию' map', но сравнение пока продолжается. Хотя многие считают, что это плохая форма, чтобы запускать «карту» для ее побочных эффектов, ее обычное дело с пулом. И хотя python 3 'map' возвращает итератор,' Pool.map' возвращает список. Таким образом, вам даже не нужно «перечислить» его. 'pool.map (действие, последовательность))' отлично. – tdelaney

ответ

1

Единственное стандартное решение для захоронения прочь результат заключается в задании на холостом _ имя:

_ = pool.map(action, sequence) 

Помимо этого, трюк, который я видел, скрывает вызов внутри другой функции, которая по сути скрывает результат от вас, то есть:

def applypool(p, action, sequence): 
    list(p.map(action, sequence)) 
Смежные вопросы