ionice?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

Ich möchte gerne einige Skripte (keine echten Programme!) von mir ionice setzen. Gibt es eine elegantere Möglichkeit als:

Code: Alles auswählen

os.system('ionice -c3 -p%s' % os.getpid())
?
Leider habe ich in den Docs nichts Entsprechendes finden können.

Danke,
Christian
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Ja, ok. Ich sollte vielleicht formulieren: Ist man gezwungen auf OS-abhängige Programme zurückzugreifen oder gibt es etwas pythoneigenes?
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Mhm, also mir ist noch keine Python-Lib bekannt, die ein entsprechendes OS-übergreifendes Priority-Changing unterstützen würde.

Unter Windows kann man via subprocess (beim starten) oder win32process.SetPriorityClass (zur Laufzeit) auf die Priorität einwirken, während Du unter Unix-Systemen dies via os.nice() handeln müsstest.

>>Masaru<<
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Danke, doch da liegt ein Missverständnis vor:
nice != ionice

os.nice entspricht in etwa nice. Das ist schön, aber nicht was ich suche.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Ah, okay.

Dann wird Dir aber wohl wirklich nichts anderes übrig bleiben, als das Programm direkt aufzurufen.

Oder Du findest alternativ den C-Weg und holst Dir via cytpes Zugriff auf die "syscall" Funktion, ermittelst die Sycall Codes für ionice_set (i.d.R. 289) und optional auch für ionice_get (i.d.R. 290) und feuerst dann nativ den Call ab.

Könnte etwa so ausschauen:

Code: Alles auswählen

ctypes.CDLL('libc.so.6').syscall(289, pid, -1, ioprio) # wobei pid und ioprio halt die Parameter vom zu beeinflussenden Prozess mit entsprechender Prioirät sind
>>Masaru<<
Zuletzt geändert von Masaru am Freitag 18. Dezember 2009, 11:24, insgesamt 2-mal geändert.
lunar

Die Alternative wäre, den Systemaufruf zu identifizieren, den "ionice" benutzt, um die E/A-Priorität zu ändern, und anschließend ctypes zu verwenden. Klingt komplizierter und ist auch komplizierter ;)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Oh, danke Masaru.

Puh, um lunar aufzugreifen: Wenn ich noch etwas mehr Energie reinstecke kann ich eine ionice-Erweiterung für das os-Modul schreiben ;-). (Würde mich sogar reizen, aber Zeit ist etwas, was ich kaum habe ...)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

CM hat geschrieben:Ja, ok. Ich sollte vielleicht formulieren: Ist man gezwungen auf OS-abhängige Programme zurückzugreifen oder gibt es etwas pythoneigenes?
Ich dachte eigentlich, dass es so eine Funktionalität sowieso nur auf Linux gibt...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Nein, das gibt es zumindest für andere UNIX-Derivate auch. (Über die genaue Zahl bin ich mir nicht im Klaren.) Außerdem gibt es in der Python-Lib auch auf Betriebssysteme eingeschränkte Funktionalität - na gut, ich habe anders gefragt, aber ich hatte auch weniger Windows im Blick, obwohl es schön wäre es auch für Windows zu haben ...
Antworten