Подтвердить что ты не робот

Управление приоритетом планирования потоков python?

Я написал script, который использует два пула потоков из десяти потоков каждый, чтобы извлекать данные из API. Пул потоков реализует этот код в ActiveState. Каждый пул потоков контролирует базу данных Redis через PubSub для новых записей. Когда публикуется новая запись, python передает данные функции, которая использует python Subprocess.POpen для выполнения оболочки PHP для выполнения фактической работы вызов API.

Эта система запуска PHP-оболочек необходима для функциональности моего веб-приложения PHP, поэтому нельзя запускать оболочки PHP с Python.

Этот script будет работать только на серверах Linux.

Как я могу контролировать niceness (приоритет планирования) потоков приложений?

Edit:

Кажется, что приоритет диспетчеризации для отдельных потоков в Python невозможен. Есть ли решение python или, по крайней мере, команда UNIX, которую я могу запустить вместе с моим script, для управления приоритетом?

Изменить 2:

Ну, я не нашел способ python справиться с этим. Я просто запускаю свой script с хорошим теперь следующим образом:

nice -n 19 python MyScript.py
4b9b3361

Ответ 1

Я считаю, что приоритет потоковой передачи не управляется в python из-за того, как они реализованы с использованием глобальной блокировки интерпретатора (GIL). Сказав это, даже если вы могли бы дать одному потоку больше приоритета обработки процессора, реализация python, которая обходит GIL, не будет знать об этом, поскольку она передавала GIL. Если бы вам удалось повысить привлекательность в одном потоке в вашем пуле (скажем, он выполняет более важную работу), вам нужно будет использовать собственную реализацию блокировок, чтобы чаще использовать поток потоков с более высоким приоритетом для GIL.

Поиск google возвращает эту статью, которая, как я считаю, похожа на то, что вы задаете

Объясняет, почему он не работает http://www.velocityreviews.com/forums/t329441-threading-priority.html

Объясняет обходной путь, который я предлагал http://bytes.com/topic/python/answers/645966-setting-thread-priorities

Ответ 2

Я знаю, прошло много времени, но я недавно наткнулся на этот вопрос, и я подумал, что было бы полезно добавить еще один вариант.

Посмотрите threading2, который является заменой и расширением для стандартного потока модуль с поддержкой - вид - для приоритет и сродство.

Ответ 3

Мне было интересно, если этот ответ по другому связанному вопросу может быть полезен в этом сценарии? ()

Поскольку вы уже используете Subprocess.POpen, чтобы запустить ваш PHP script, он поражает меня что вы можете использовать "preexec_fn" и либо предопределенную функцию, либо функцию лямбда (как показано в приведенном выше ответе), чтобы установить хороший уровень каждого запущенного потока PHP?