В циклах for есть несколько задач, которые можно вызывать и запускать параллельно. Но нам нужно накапливать результат каждой задачи в одной и той же структуре данных.
class Accumulator:
def __init__(self):
self.signal = np.zeros((10000,), dtype=float)
self.count = np.zeros((10000,), dtype=int)
def on_result(self, result):
self.signal += result[0]
self.count += result[1]
if __name__ == '__main__':
num_proc = multiprocessing.cpu_count()
pool = multiprocessing.Pool(num_proc)
accumulator = Accumulator()
for chrName in chrNames:
for simNum in sims:
pool.apply_async(func, (chrName,simNum,), callback=accumulator.on_result)
pool.close()
pool.join()
print(accumulator.signal)
print(accumulator.count)
Какой метод пула многопроцессорной обработки python является лучшим с точки зрения времени выполнения и использования памяти?
Apply or map or imap?
sync or async?
Существует ли тестирование производительности / памяти для этих возможностей?