Как выбрать размер фрагмента для многопроцессорной обработки python с большими наборами данных


Я пытаюсь использовать python, чтобы получить некоторую производительность в задаче, которая может быть сильно распараллелена с помощью http://docs.python.org/library/multiprocessing .

Когда они смотрят на свою библиотеку, они говорят, что используют размер блока для очень длинных итераций. Теперь, мой iterable не длинный, один из диктов, которые он содержит, огромен: ~100000 записей, с кортежами в качестве ключей и массивами numpy для значений.

Как бы я установил размер блока для обработки этого и как я могу передать эти данные быстро?

Спасибо.

1 5

1 ответ:

Единственный способ обработать этот один большой элемент в нескольких рабочих одновременно-это разделить его. multiprocessing работает, разделяя работу на единицы, но самая маленькая единица, которую вы можете кормить, - это один объект-он не может знать, как разделить один объект разумным способом. Вместо этого ты должен сделать это сам. Вместо того, чтобы посылать дикты, над которыми нужно работать, разбейте дикты на более мелкие рабочие единицы и отправьте их вместо этого. Если вы не можете разделить дикт, потому что все данные взаимозависимый,тогда вы не можете действительно разделить работу.