ProcessPoolExecutor не работает должным образом [закрыто]Python

Программы на Python
Anonymous
 ProcessPoolExecutor не работает должным образом [закрыто]

Сообщение Anonymous »

Я не могу предоставить код, с которым у меня возникли проблемы, поскольку я не могу получить к нему доступ здесь.
Но суть в том, что у меня есть большой массив байтов, который я прочитал из файла (около 12 ГБ). Затем мне нужно декодировать (используя справочную таблицу) этот массив байтов в значения complex64 и выполнить статистику по сегментам этих данных. Все эти статистические данные не зависят друг от друга. Таким образом, я могу декодировать фрагмент данных и выполнить статистику по этим данным, сохранить их и то же самое с другими фрагментами этих данных.
Это само по себе было довольно медленно, поэтому я попробовал использовать ProcessPoolExecutor. Моя машина имеет 48 реальных ядер (96, если вы используете os.cpu_count). Я пытаюсь использовать только 24. В основном я выполняю вызов with ProcessPoolExecutor(max_workers=24) и внутри него есть цикл for с оператором длиной 24 (чтобы равняться количеству потоков) и разбивает массив байтов на 24 фрагмента данных для декодирования и получения статистики.
Однако при запуске вершины я видел только 4-5 из тот побочные процессы работают одновременно, и поэтому я получаю ускорение только примерно в 4 раза. Мне интересно, почему я не могу видеть, что почти все 24 операции используются одновременно. Чтобы внести ясность: я вижу, что все они запускаются одновременно, поэтому имеется 24 процесса, но загрузка ЦП равна 0 для всех, кроме 4 или около того.
Мне нужно собрать результаты из них и поместить их в объект данных. После этого у меня есть вызов Future.as_complete, чтобы собрать и сохранить их в правильном порядке. (Я ввожу start_idx и возвращаю его, чтобы знать, когда результат вернется, куда его поместить.) Но я тоже не думаю, что это проблема.

Подробнее здесь: https://stackoverflow.com/questions/798 ... s-expected

Вернуться в «Python»