Contrôler la priorité d'ordonnancement des threads python?
J'ai écrit un script qui utilise deux pools de threads de dix threads chacun d'extraire des données à partir d'une API. Le pool de threads implémente ce code de ActiveState. Chaque pool de threads est suivi d'un Redis base de données via PubSub pour les nouvelles entrées. Lorsqu'un nouveau billet est publié, python transmet les données à une fonction qui utilise python Sous-processus.POpen pour exécuter un code PHP shell pour faire le travail à l'appel de l'API.
Ce système de lancement de PHP obus est nécessaire pour la fonctionnalité avec mon PHP web app, de sorte que le lancement de PHP coquilles avec Python ne peut pas être évitée.
Ce script ne sera exécuté sur des serveurs Linux.
Comment puis-je contrôler le la gentillesse (priorité de planification), les threads de l'application?
Edit:
Il semble que le contrôle de priorité d'ordonnancement de threads individuels en Python n'est pas possible. Est-il un python solution, ou au moins une commande UNIX je peux courir avec mon script, pour le contrôle de la priorité?
Edit 2:
Bien je n'ai pas fini de trouver un python façon de le gérer. Je suis juste en cours d'exécution de mon script avec belle maintenant comme ceci:
nice -n 19 python MyScript.py
source d'informationauteur Backus
Vous devez vous connecter pour publier un commentaire.
Je crois que le filetage de priorité n'est pas contrôlable en python en raison de la façon dont ils sont mis en œuvre à l'aide d'un mondial interprète de verrouillage (GIL). Cela étant dit, même si vous pouviez donner un thread CPU plus la priorité de traitement, le python de mise en œuvre que les mains autour de la GIL ne serait pas conscient de ce qu'il a remis autour de la GIL. Si vous avez été en mesure d'augmenter la gentillesse dans un seul fil dans votre piscine (disons qu'il est en train de faire un plus de travail), vous devrez utiliser votre propre mise en œuvre des serrures pour donner le thread de priorité plus élevée de l'accès à l'GIL plus souvent.
Une recherche google renvoie cet article qui, je crois, est similaire à ce que vous demandez
Explique pourquoi il ne marche pas
http://www.velocityreviews.com/forums/t329441-threading-priority.html
Explique la solution de contournement, j'ai été suggérant
http://bytes.com/topic/python/answers/645966-setting-thread-priorities
Je sais, beaucoup de temps a passé, mais je suis récemment tombé sur cette question, et j'ai pensé qu'il serait utile d'ajouter une autre option.
Ont un coup d'oeil à threading2qui est un drop-in de remplacement et d'extension par défaut filetage module, avec l'appui – en quelque sorte – pour priorité et de l'affinité.
Je me demandais si cette réponse à une autre question relative à la pourrait être utile dans ce scénario? (lien)
Que vous utilisez déjà Sous-processus.POpen pour lancer votre script PHP, il me semble que vous pouvez utiliser "preexec_fn" et soit une fonction prédéfinie, ou une fonction lambda (comme démontré ci-dessus lié réponse) pour définir le bon niveau de chaque lancé PHP fil?