überraschend nützliche Module

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
MagBen
User
Beiträge: 789
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Freitag 9. Oktober 2015, 09:39

Immer wieder stoße ich auf überraschend nützliche Module, von denen ich vorher noch nie etwas gehört habe. Vielleicht passiert das ja auch anderen Leuten. Deshalb würde ich gerne, dass hier solche überraschend nützlichen Module vorgestellt werden.

Den Anfang mache ich mit setproctitle.
Das Python Modul setproctitle ist kein Standardmodul, es macht nicht viel, es ändert einfach nur den Namen des Prozesses. Der Name eines Python Prozesses ist sonst nämlich einfach nur "python". Man kann also wunderbare Programme schreiben, aber diese erscheinen unter Unix, wenn man top aufruft einfach nur unter dem Namen python. Dagegen erscheinen alle Programme, die mit "richtigen Sprachen" erstellt wurden unter ihrem richtigen Namen (dem Namen des Binary). Die Kollegen denken, ah der skriptet nur. Mit setproctitle bekommt nun aber auch das Python Programm einen richtigen Namen.

Code: Alles auswählen

try:
    from setproctitle import setproctitle
except:
    # setproctitle is not installed
    def setproctitle(proctitle):
        pass

setproctitle("kill_cpu_time")

while(True):
    pass
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
Kebap
User
Beiträge: 402
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Freitag 9. Oktober 2015, 11:04

Ich empfehle die Seite: Python module of the week
MorgenGrauen: 1 Welt, >12 Gilden, >85 Abenteuer, >1000 Waffen und Rüstungen,
>2500 NPC, >16000 Räume, >170 freiwillige Programmierer, einfach Text, seit 1992.
BlackJack

Freitag 9. Oktober 2015, 14:47

@MagBen: Interessante Definition von ”nützlich” wenn der einzige Nutzen ist das ignorante Kollegen nicht sehen das man in Python programmiert. ;-) Wenn es einem peinlich ist in Python zu programmieren kann man auch etwas anderen verwenden. :-D
Benutzeravatar
kbr
User
Beiträge: 957
Registriert: Mittwoch 15. Oktober 2008, 09:27

Freitag 9. Oktober 2015, 15:08

@BlackJack: Wenn Du eine Vielzahl von Python-Prozessen laufen hast, dann ist es doch gar nicht so verkehrt anhand des Namens erkennen zu können, welche man ggf. abschiessen kann ... 8)
BlackJack

Freitag 9. Oktober 2015, 15:27

@kbr: Ich benutze htop, das zeigt nicht nur den Programmnamen an. Denn das ”Problem” betrifft ja nicht nur Python sondern auch alle anderen Programme bei denen anhand der She-Bang-Zeile entschieden wird womit sie letztendlich ausgeführt werden. Auch Java-Programme werden oft mit ``java -jar …`` gestartet. Und selbst bei ”nativen” Programmen brauche ich ab und zu mehr als nur den Namen um mehrere laufende Prozesse unterscheiden zu können bevor ich sie abschiesse, also zum Beispiel mit welcher Kommandozeile/Konfigurationsdatei ein Datenbankserver gestartet wurde, weil da mehr als ein Exemplar von läuft.
Benutzeravatar
snafu
User
Beiträge: 5632
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Freitag 9. Oktober 2015, 15:47

@MagBen: Schalte für deine Programme doch ein Shell-Skript dazwischen, wobei du die Dateiendung weglässt. Auf Nicht-Windows Systemen ist dies ja problemlos möglich. Dieses Skript startet dann dein eigentliches Python-Programm. Dann musst du dich deinen Kollegen gegenüber nicht mehr schämen und wirst wieder als vollwertiger Programmierer von deiner Peer-Group anerkannt. ;)

Wer Ironie entdeckt, darf sie übrigens behalten...
shcol (Repo | Doc | PyPi)
mutetella
User
Beiträge: 1690
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Freitag 9. Oktober 2015, 19:57

Also ich hatte für (oder eher gegen?) meinen Sohnemann mal ein Skript geschrieben, das seine Maschine nach einem bestimmten Zeitpensum herunter fuhr. In dem Fall wäre das ganz interessant gewesen, um dieses Skript mit einem unverfänglichen Namen zu tarnen. Denn hätte er Papas scheiß Skript gesucht, hätte er sicher erstmal alles mit Namen `python` abgeschossen... :mrgreen:

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

Freitag 9. Oktober 2015, 20:43

@mutetella: Das ist ja wohl eher eine Rechte-Frage. Er kann ja gerne Papas Scheiss-Skript finden — solange es mit Rechten läuft die ihn daran hindern es zu beenden… ;-)
mutetella
User
Beiträge: 1690
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Freitag 9. Oktober 2015, 20:58

@BlackJack
Nun ja, der arme Kerl musste immer schon Verantwortung als root über seine Kiste übernehmen… :wink: Da musste ich einfach hoffen, dass er so lange wie möglich nichts von ``ps`` und ``kill`` hört...

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
kbr
User
Beiträge: 957
Registriert: Mittwoch 15. Oktober 2008, 09:27

Samstag 10. Oktober 2015, 09:43

BlackJack hat geschrieben:@kbr: Ich benutze htop, das zeigt nicht nur den Programmnamen an ... zum Beispiel mit welcher Kommandozeile/Konfigurationsdatei ein Datenbankserver gestartet wurde, weil da mehr als ein Exemplar von läuft.
Kannte ich noch nicht und habe es gerade installiert - das ist ja wirklich hilfreich.
Benutzeravatar
MagBen
User
Beiträge: 789
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Samstag 10. Oktober 2015, 10:33

snafu hat geschrieben:Schalte für deine Programme doch ein Shell-Skript dazwischen, wobei du die Dateiendung weglässt.
Das mache ich sowieso, weil da meist ein etwas komplexerer mpiexec Befehl drinsteht, aber mit sh Endung und unter top sehe ich das dann nur als sh. Aber selbst wenn ich die Endung weglasse, ist das Shell-Skript unter top nur schwer zu finden, da es ja weder signifikante Rechenzeit noch Speicher verbraucht.
snafu hat geschrieben:Dann musst du dich deinen Kollegen gegenüber nicht mehr schämen und wirst wieder als vollwertiger Programmierer von deiner Peer-Group anerkannt.
Es sind ja eigentlich in C++ geschriebene Anwendungen, ich schreibe sie als Bibliothek (mit Swig gewrappt) und erspare mir aber die main-Funktion und den Config-Parser in C++. In Python gibt es dann verschiedene main-Funktionen in denen die Top-Level Objekte erzeugt und miteinander verknüpft werden.

Ein Nachteil bei diesem Ansatz gegenüber einem C++ Programm ist, dass ich in jedem Projektverzeichnis, das eine Rechnung enthält, ein Zweizeiler-Python-Script run_hoxpox_4d.py brauche, das etwa so aussieht

Code: Alles auswählen

import hoxpox_4d
hoxpox_4d.main()
Bei einer C++ Anwendung hätte ich einfach hoxpox_4d.bin im PATH und könnte dann
mpiexec -np 8 -machinefile=machines hoxpox_4d.bin -a=1 -b=2 -c="drei"
aufrufen anstatt
mpiexec -np 8 -machinefile=machines python run_hoxpox_4d.py -a=1 -b=2 -c="drei"

top zeigt nun z.B. auf dem 1.Rechner
hoxpox_4d p0/8
hoxpox_4d p1/8
und auf dem 4. Rechner
hoxpox_4d p6/8
hoxpox_4d p7/8

Dank setproctitle sehe also auch welcher mpi-Prozess es ist. Oder wenn ein Rechner mehrere GPUs hat dann kann das so aussehen:
hoxpox_4d p2/8 gpu0
hoxpox_4d p3/8 gpu1
a fool with a tool is still a fool, www.magben.de, YouTube
Antworten