Многопроцессорная обработка: передача (и повторение) списка массивов на карту пула - PullRequest
1 голос
/ 12 апреля 2020

Я играл с передачей строк в функцию.

В качестве примера, с input_list_1, я нахожу возвращение из функции частично правильным - только первые n, которые соответствуют числу процессоров, правильный. Остальные выходы неверны. Я экспериментировал с вводом chunksize и с map_asyn c, но не повезло.

pool = mp.Pool(processes=2)
input_list_1=['string1','string2','string3','string4']
results=pool.map(somefunction, input_list_1)

Однако, когда я нарушаю свой ввод, как показано в input_list_2 (каждый массив соответствует количеству процессоров), и передаю input_list_2 [0 ] и input_list_2 [1] в качестве отдельных аргументов, я считаю, что возврат из функции более предсказуем и соответствует тому, что я ожидаю.

Есть ли способ передать input_list_2 в качестве аргумента и сделать какой-то тип итерации? Я перепробовал все, что смог найти, связанные с итерациями - imap, map_asyn c, starmap.

pool = mp.Pool(processes=2)
input_list_2=[('string1','string2'),('string3','string4')]
results=pool.map(somefunction, input_list_2)

1 Ответ

1 голос
/ 12 апреля 2020

у вас, вероятно, есть что-то вроде этого:

def somefunc(str):
   ##string specific method
   print(str.strip())

pool = mp.Pool(processes=2)
input_list=['string1 ','string2 ','string3 ','string4']
pool.map(somefunction, input_list)

string1
string2
string3
string4

, где map будет отправлять каждую строку в итерации для somefun c.

Однако, когда вы разбиваете свой список на два кортежа :

input_list_2=[('string1','string2'),('string3','string4')]

отправляет кортеж ('string1','string2') в качестве аргумента somefunc.

, если вы действительно хотите разделить их таким образом, ваша функция должна обработать кортеж.

def somefunc(tupple):
   ##string specific method
   for x in tupple:
      print(x.strip())


pool = mp.Pool(processes=2)
input_list_2=[('string1 ','string2 '), ('string3 ','string4')]
pool.map(somefunction, input_list_2)


string1
string2
string3
string4
...