Seite 1 von 1

ionice?

Verfasst: Freitag 18. Dezember 2009, 10:34
von CM
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

Verfasst: Freitag 18. Dezember 2009, 10:42
von lunar
subprocess.

Verfasst: Freitag 18. Dezember 2009, 10:48
von CM
Ja, ok. Ich sollte vielleicht formulieren: Ist man gezwungen auf OS-abhängige Programme zurückzugreifen oder gibt es etwas pythoneigenes?

Verfasst: Freitag 18. Dezember 2009, 10:59
von Masaru
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<<

Verfasst: Freitag 18. Dezember 2009, 11:04
von CM
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.

Verfasst: Freitag 18. Dezember 2009, 11:14
von Masaru
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<<

Verfasst: Freitag 18. Dezember 2009, 11:18
von 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 ;)

Verfasst: Freitag 18. Dezember 2009, 11:33
von CM
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 ...)

Verfasst: Freitag 18. Dezember 2009, 17:44
von Leonidas
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...

Verfasst: Samstag 19. Dezember 2009, 22:57
von CM
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 ...