У меня есть цикл for, который использует некоторые двоичные условия и, наконец, записывает файл соответствующим образом. Проблема у меня есть, условия верны для многих файлов (иногда требуется около 1000 файлов). Поэтому писать их занимает много времени (около 10 минут). Я знаю, что могу как-то использовать Python multiprocessing
и использовать некоторые из ядер.Использовать многопроцессорность для цикла for, Python
Это код, который работает, но использует только одно ядро.
for i,n in enumerate(halo_param.strip()):
mask = var1['halo_id'] == n
newtbdata = tbdata1[mask]
hdu = pyfits.BinTableHDU(newtbdata)
hdu.writeto(('/home/Documments/file_{0}.fits').format(i))
я наткнулся, что это может быть сделано с помощью Pool
из multiprocessing
.
if __name__ == '__main__': pool = Pool(processes=4)
Я хотел бы знать, как сделать это и использовать по крайней мере 4 из моих ядер.
так, говоря, 'Я, п = arg', когда мы называем' pool.map' функцию принимает ARG быть 'перечисление (halo_param.strip())'. Но как это происходит? Здесь я не вижу никаких петель, но, похоже, это работает! – ThePredator
@ThePredator, 'multiprocessing.Pool.map' работает как встроенная функция [' map'] (https://docs.python.org/2/library/functions.html#map). 'map' применяет данную функцию для каждого элемента последовательности (или любого итеративного, второго аргумента). Следуйте ссылке, если хотите узнать больше о функции 'map'. – falsetru