2015-08-07 10 views
0

я понял из простых примеров, которые Pool.map предполагается вести себя идентично «нормальной» код питона ниже, за исключением параллельно:multiprocessing.Pool.map() не работает, как ожидалось

def f(x): 
# complicated processing 
return x+1 

y_serial = [] 
x = range(100) 
for i in x: y_serial += [f(x)] 
y_parallel = pool.map(f, x) 
# y_serial == y_parallel! 

Однако у меня есть два бита кода, который я считаю, должны последовать этому примеру:

#Linear version 
price_datas = [] 

for csv_file in loop_through_zips(data_directory): 
    price_datas += [process_bf_data_csv(csv_file)] 

#Parallel version 
p = Pool() 
price_data_parallel = p.map(process_bf_data_csv, loop_through_zips(data_directory)) 

Однако параллельный код не работает, тогда как линейный код делает. Из того, что я могу наблюдать, параллельная версия, похоже, проходит через генератор (он выводит строки журнала из функции генератора), но затем фактически не выполняет функцию «process_bf_data_csv». Что я здесь делаю неправильно?

ответ

2

.map пытается вытащить все значения из вашего генератора, чтобы сформировать его в итерабельном, прежде чем начать работу. Попробуйте подождать дольше (пока генератор не закончится) или используйте многопоточность и очередь.

+1

Это может быть и генератор. – dano

+0

Спасибо за разъяснение, просто протестировали его и отредактировали мой пост. – Ayy

Смежные вопросы