2012-02-27 1 views
1

Je dois écrire un script de transcodage qui émet une commande ffmpeg appropriée s'il y a des ressources disponibles sur un ordinateur Mac. La machine est un 6-Core 2 x 2,66 GHz. Fondamentalement, la logique que je veux employer est:Vérifier les cœurs de traitement disponibles

[cron every x minutes] 
if available_cores: 
    pull front file in queue and transcode 
else: 
    pass 

Comment pourrais-je vérifier s'il y a des unités de traitement disponibles pour exécuter ffmpeg?

Répondre

1

J'utiliserais les moyennes de charge à partir de la commande uptime, et si la charge est suffisamment basse, lancez-en une. Il n'y a probablement pas de noyau inactif parce que n'importe quel système moderne a assez de choses aléatoires de basse priorité fonctionnant en arrière-plan que vous ne verrez jamais complètement aller au ralenti. Alors cherchez une moyenne de faible charge et allez-y en fonction de cela.

1

/proc/cpuinfo vous donnera un compte de base

pour que vous puissiez le lire et tirer un nombre de cœurs.

puis de faire une liste de processus et de compter les processus FFMPEG. Soustrayez l'un de l'autre et vous êtes en assez bon état.

qui devrait vous donner conditionnel.

alternativement regarder la charge par le temps de disponibilité et faire un conditionnel basé sur la valeur présentée.

Il existe également une affinité entre un processus et un processeur sous Unix sous SMP.

Regardez le jeu de tâches de l'outil. Vous pouvez installer un outil de suivi des ID de processus dans/var quelque part, puis gérer l'affinité avec votre script.

3

Utilisez ce que vous a donné Unix :) Je suggère que le programme (une partie de at) batch souvent inconnu qui invoquera le programme argumenté (s) lorsque la charge moyenne est inférieure à un certain seuil, en les tenant dans une file d'attente. man batch

+0

Cela semble être une bonne idée. Pourriez-vous s'il vous plaît me montrer un exemple de code approximatif de la façon dont la file d'attente basée sur la moyenne de charge fonctionnerait? – David542

+0

@ David542, comme vous avez besoin de mettre en file d'attente un travail (une ligne de commande, dans notre cas 'ffmpeg'), juste ajouter" batch "à celui-ci. 'batch' (ou plutôt' atrun' ou 'launchd') vérifiera périodiquement la moyenne de la charge et si elle est inférieure à un seuil, appelez la commande en file d'attente et répétez. Les résultats stdout & stderr sont envoyés par e-mail à l'utilisateur Unix (mais généralement le travail gérera la sortie du journal). La configuration du seuil de charge moyenne est généralement spécifique à Unix. – Xailor

Questions connexes