2010-03-08 3 views
9

Ich habe eine Funktion in meinem CMS, mit der ein Benutzer eine ZIP-Datei voller Bilder hochladen kann. Der Server extrahiert sie und fügt sie in eine Bildergalerie ein. Mir ist aufgefallen, dass dies die CPU ziemlich stark beansprucht und andere Anfragen verlangsamt.Ausführen von Aufgaben im Hintergrund mit geringerer CPU-Priorität

Ich denke daran, das delayed_job-Plugin zu verwenden, um jeden Bildzusatz in den Hintergrund zu delegieren, aber ich möchte diesem Prozess auch eine niedrigere CPU-Priorität geben, damit er den Server nicht stört.

Ich bin ziemlich zuversichtlich in den verzögernden Teil der Übung, aber der Drosselungsteil ist, wo ich feststecke. Gibt es einen rubinroten Weg, die Priorität eines Methodenaufrufs zu senken?

Es ist die Bildgrößenanpassung, die CPU-Kauen verursacht.

Irgendwelche Ideen willkommen :)

Antwort

6

Wenn Ihr CMS auf Linux-System läuft, dann können Sie dies tun, um die „nette“ Befehl. "nett" startet einen Prozess mit einer niedrigeren Priorität. Der einfachste Weg, es zu benutzen, ist, einfach schön vor deinen Befehl zu setzen. Also, wenn Sie den Befehl ausgeführt wurden, wie

unzip uploaded-images.zip

laufen statt

nice unzip uploaded-images.zip

Dadurch wird der unzip Prozess verursachen geringere CPU-Priorität zu bekommen, lassen andere Prozesse zuerst ausgeführt. Weitere Optionen finden Sie unter man page, z. B. zum Anpassen der Prioritätsebene.

+0

Danke dafür, dass ich auch mit Google darüber gestolpert bin: http://stackoverflow.com/questions/1340142/preventing-delayed-job-background-jobs-from-consuming-too-much-cpu-on-a -Single-se –