Как я могу заставить python использовать больше моего процессора? - PullRequest
0 голосов
/ 27 апреля 2020

У меня довольно мощный python скрипт, который я бы хотел ускорить. Несмотря на то, что приоритет процесса установлен в «реальном времени», он использует только 10% одного из 12 ядер. Как я могу заставить python использовать больше и, таким образом, быстрее sh выполнять задачи? Или есть ограничение для предотвращения более чем x вычислений / действий за раз? Заранее спасибо!

Редактировать: все ядра были бы великолепны, но было бы неплохо использовать их больше. Программа в основном представляет собой несколько вложенных циклов, вроде грубой силы. Это одна функция

1 Ответ

0 голосов
/ 27 апреля 2020

То, о чем вы спрашиваете, - это широкое поле «профилирования» вашего кода. Вам нужно посмотреть, что занимает больше всего времени (вероятно, «настенное» время), и глубже понять, что вызывает это. Некоторые вероятные варианты, но я просто предполагаю, что у меня нет вашего кода:

  1. Ожидание на диске или в сети - обычное место, где ваш код может застрять. При профилировании вашего кода, посмотрите, читаете ли вы / пишете файлы или делаете сетевые вызовы, и если да, подумайте о написании вашего кода асинхронным или параллельным способом (например, используя asyncio или многопроцессорную обработку ) разрешить либо одному потоку Python одновременно работать с несколькими операциями ввода-вывода, либо параллельному блокированию нескольких процессов Python.

  2. Вы уверены, что это 10% от 12 сердечники? Показания ЦП часто показывают процентное соотношение всех ядер, поэтому возможно, что то, что вы видите, составляет ~ 10% от всех ядер, что будет полным ядром. Это просто предложение перепроверить.

  3. Для многих распространенных задач (нумерация c - это пример использования, с которым я особенно знаком), есть библиотеки Python которые реализуют общие операции в низкоуровневых библиотеках и предоставляют вам высокоуровневые инструменты, которые используют эти библиотеки (например, Numpy). Вот как большинство людей получают высокопроизводительный код в Python: используя код Python для создания сценариев и связывания операций, которые в основном реализуются в низкоуровневом коде различными библиотеками.

Но я уверен, что вам сообщат в комментариях и, возможно, даже пометят и закроют этот вопрос, вам нужно профилировать свой код и выяснить, куда идет время, а затем углубиться в это. Преждевременная оптимизация - это root всего зла .

...