Der CCC Dresden lädt ein:
* * * Themenabend Python und Twisted * * *
Termin: 28. Juli 2006, 19.00 Uhr
Ort: Berufsakademie Dresden Raum G3 Heideparkstr. 8 01099 Dresden
Python[0] ist eine dynamisch typisierte, objektorientierte, quelloffen entwickelte Programmiersprache, bei deren Design großen Wert auf Einfachheit und Übersichtlichkeit legt. Mehr bitte bei [1] nachlesen.
Beim Themenabend soll zunächst eine Einführung in grundlegende Konzepte der Sprache geboten werden, wie sie in nahezu allen Sprachen vorhanden sind. Hierzu sollten keine Programmiervorkenntnisse nötig sein. Im Laufe des Abends soll immer stärker auf Python-spezifische Merkmale eingegangen werden, so dass dann auch Programmierer, die sich bisher mit Python nur wenig auskennen, auf ihre Kosten kommen.
Später soll noch kurz das Programmierframework Twisted[2] vorgestellt werden, das die Möglichkeit bietet, in Python asynchrone Programmierung ohne Threads (eventbasiert) zu betreiben, und damit hohe Performance erreicht. Twisted bietet aber vorallem fertige Bibliotheken zu Netzwerkprogrammierung an, HTTP über SMTP, IMAP, POP, bis hin zum eigenen SSH-Server an.
Wer Lust hat, selber noch etwas beizutragen, oder Fragen oder Anregungen, der melde sich bitte bei mir unter frank-python@benkstein.net
Ich freue mich auf Eure Teilnahme, bis dann Frank Benkstein aka toidinamai
[0] http://www.python.org [1] http://de.wikipedia.org/wiki/Python_%28Programmiersprache%29 [2] http://twistedmatrix.com/
On Thu, Jul 13, 2006 at 01:12:34PM +0200, Frank Benkstein wrote:
Der CCC Dresden lädt ein:
- Themenabend Python und Twisted * * *
Später soll noch kurz das Programmierframework Twisted[2] vorgestellt werden, das die Möglichkeit bietet, in Python asynchrone Programmierung ohne Threads (eventbasiert) zu betreiben, und damit hohe Performance erreicht. Twisted bietet aber vorallem fertige Bibliotheken zu Netzwerkprogrammierung an, HTTP über SMTP, IMAP, POP, bis hin zum eigenen SSH-Server an.
Hallo Frank und andere,
ich bin großer Freund der Programmiersprache Python, aber mit Twisted konnte ich mich noch nicht anfreunden. Hier ein paar Fragen, da ich leider nicht zum Themenabend kommen kann.
Twisted lauscht doch an einem oder mehreren Filedescriptoren/Sockets (select, bzw. poll) und verarbeitet dann die Descriptoren über die Daten gerade angekommen sind. Arbeitet dabei nur eine Instanz des Pythoninterpreters (ein Prozess)? Wenn dem so wäre, dann würde doch das Abarbeiten der anderen Anfragen stehenbleiben, falls mal das bearbeiten eines Events lange dauert.
Threads sind dafür keine gute Lösung, da aufgrund des GIL (Global Interpreter Locks) wirkliche Paralallität nicht möglich ist.
Oder unterstüzt Twisted auch ein Prefork Workerprozess Modell, wie z.B. SCGI (ähnlich aber einfacher als FastCGI)?
Ich denke die Twisted-Leute haben dafür schon Lösungen parat, oder?
Gruß, Thomas
Hallo, Thomas,
On Fri, Jul 14, 2006 at 10:16:55PM +0200, Thomas Guettler wrote:
On Thu, Jul 13, 2006 at 01:12:34PM +0200, Frank Benkstein wrote:
Der CCC Dresden lädt ein:
- Themenabend Python und Twisted * * *
Später soll noch kurz das Programmierframework Twisted[2] vorgestellt werden, das die Möglichkeit bietet, in Python asynchrone Programmierung ohne Threads (eventbasiert) zu betreiben, und damit hohe Performance erreicht. Twisted bietet aber vorallem fertige Bibliotheken zu Netzwerkprogrammierung an, HTTP über SMTP, IMAP, POP, bis hin zum eigenen SSH-Server an.
ich bin großer Freund der Programmiersprache Python, aber mit Twisted konnte ich mich noch nicht anfreunden. Hier ein paar Fragen, da ich leider nicht zum Themenabend kommen kann.
Twisted lauscht doch an einem oder mehreren Filedescriptoren/Sockets (select, bzw. poll) und verarbeitet dann die Descriptoren über die Daten gerade angekommen sind. Arbeitet dabei nur eine Instanz des Pythoninterpreters (ein Prozess)? Wenn dem so wäre, dann würde doch das Abarbeiten der anderen Anfragen stehenbleiben, falls mal das bearbeiten eines Events lange dauert.
Threads sind dafür keine gute Lösung, da aufgrund des GIL (Global Interpreter Locks) wirkliche Paralallität nicht möglich ist.
Oder unterstüzt Twisted auch ein Prefork Workerprozess Modell, wie z.B. SCGI (ähnlich aber einfacher als FastCGI)?
Twisted arbeitet im Allgemeinen ohne Forks oder Threads (obwohl das möglich ist). Jede Funktion muss daher die Kontrolle so schnell wie möglich wieder an die Hauptschleife zurückgeben. Ist in einer Funktion das zurückzugebene Ergebnis aber nicht sofort da, kann die Funktion auch ein Deferred-Objekt zurückgeben, quasi ein Versprechen, dass es das Ergebnis später noch geben wird. Um mit dem Ergebnis dann umzugehen, muss sich eine Funktion als Callback (oder Errback, um einen Fehler zu fangen) bei dem Deferred-Objekt registrieren. Dies war für mich, als ich es zum ersten Mal gelesen habe, ein ziemlich verwirrendes Konzept und ich glaube, dass es den meisten ähnlich gehen wird, deshalb werde ich beim Themenabend darauf auch besonders eingehen. Das Deferred-Konzept ist in der Twisted-Dokumentation recht gut beschrieben, allerdings muss man die Texte wohl mehrmals lesen und nebenher selber etwas dazu programmieren um es richtig zu verstehen. :-)
Also bis dann Frank Benkstein.
On Sat, Jul 15, 2006 at 12:22:48AM +0200, Frank Benkstein wrote:
Hallo, Thomas,
Hi,
Twisted lauscht doch an einem oder mehreren Filedescriptoren/Sockets (select, bzw. poll) und verarbeitet dann die Descriptoren über die Daten gerade angekommen sind. Arbeitet dabei nur eine Instanz des Pythoninterpreters (ein Prozess)? Wenn dem so wäre, dann würde doch das Abarbeiten der anderen Anfragen stehenbleiben, falls mal das bearbeiten eines Events lange dauert.
Twisted arbeitet im Allgemeinen ohne Forks oder Threads (obwohl das möglich ist). Jede Funktion muss daher die Kontrolle so schnell wie möglich wieder an die Hauptschleife zurückgeben. Ist in einer Funktion das zurückzugebene Ergebnis aber nicht sofort da, kann die Funktion auch ein Deferred-Objekt zurückgeben, quasi ein Versprechen, dass es das Ergebnis später noch geben wird. Um mit dem Ergebnis dann umzugehen, muss sich eine Funktion als Callback (oder Errback, um einen Fehler zu fangen) bei dem Deferred-Objekt registrieren.
Also einfach gesagt eventbasierte Programmierung, man hat eine Mainloop die auf Ereignisse wartet (Networkinput, Userinput, Timer) und man registriert Callbacks für diese Events.
In dem Fall muss man wirklich überlegen wie sich das Programm beim Abarbeiten großer Datenmangen verhalten soll. Ein Weg wäre den Bottom-Half Ansatz des Linux-Kernels bei Interrupts zu verwenden, der Callback macht nur das wirklich Notwendige (z.B. Sichern der einkommenden Daten in einen Buffer), registriert eine Methode die irgendwann später ausgeführt wird zum Bearbeiten der Daten, und kehrt dann sofort in die Mainloop zurück.
Der sauberere Weg IMHO würden aber Worker-Threads bzw. Worker-Forks sein. Bietet Python eine Möglichkeit an Socket-Descriptoren an einen anderen Prozess weiterzugeben?
Just my 2¢
Ciao, Tobias
On Sat, Jul 15, 2006 at 12:17:06PM +0200, Tobias Koenig wrote:
On Sat, Jul 15, 2006 at 12:22:48AM +0200, Frank Benkstein wrote: In dem Fall muss man wirklich überlegen wie sich das Programm beim Abarbeiten großer Datenmangen verhalten soll. Ein Weg wäre den Bottom-Half Ansatz des Linux-Kernels bei Interrupts zu verwenden, der Callback macht nur das wirklich Notwendige (z.B. Sichern der einkommenden Daten in einen Buffer), registriert eine Methode die irgendwann später ausgeführt wird zum Bearbeiten der Daten, und kehrt dann sofort in die Mainloop zurück.
Der sauberere Weg IMHO würden aber Worker-Threads bzw. Worker-Forks sein. Bietet Python eine Möglichkeit an Socket-Descriptoren an einen anderen Prozess weiterzugeben?
Hallo,
so weit ich weiß gibt es in der Standardbibliothek noch nicht diese Möglichkeit. Aber es ist möglich. Man muss vermutlich wenige Zeilen C-Code übersetzen.
Um zu wissen ob unser Archiv[1] auch skaliert, habe ich mal SCGI ausprobiert, dass genau mit diesem Prinzip arbeitet. Es ist verdammt schnell. Derzeit reicht die Performance mit einfachen CGI, was es etwas einfacher macht neuen Quelltext einzuspielen (Es muss kein Server neu gestartet werden, einfach Quelltext kopieren).
Gruß, Thomas
[1] MODARCH: http://www.tbz-pariv.de/modarch/index.html
Hallo Liste, habe folgendes Problem beim installieren von Gtk+ kommt bei "Make" folgende Fehlermeldung.
./.libs/libgtk-x11-2.0.so: undefined reference to `g_type_register_static_simple' ./.libs/libgtk-x11-2.0.so: undefined reference to `g_intern_static_string' ./.libs/libgtk-x11-2.0.so: undefined reference to `g_object_compat_control' collect2: ld returned 1 exit status make[4]: *** [gtk-query-immodules-2.0] Fehler 1 make[4]: Leaving directory `/home/husky/gtk+-2.8.20/gtk+-2.8.20/gtk' make[3]: *** [all-recursive] Fehler 1 make[3]: Leaving directory `/home/husky/gtk+-2.8.20/gtk+-2.8.20/gtk' make[2]: *** [all] Fehler 2 make[2]: Leaving directory `/home/husky/gtk+-2.8.20/gtk+-2.8.20/gtk' make[1]: *** [all-recursive] Fehler 1 make[1]: Leaving directory `/home/husky/gtk+-2.8.20/gtk+-2.8.20' make: *** [all] Fehler 2
nach erfolgloser Recherche weiß ich nicht mehr weiter...Für tips wäre ich dankbar
Grüße Marko Roch
Alle 21:32, mercoledì, 19. luglio 2006, Roch Marko ha scritto:
./.libs/libgtk-x11-2.0.so: undefined reference to `g_type_register_static_simple'
Das sieht nach glib aus. Lösungsvorschläge: * glib 2.12 installieren, kam zusammen mit Gtk+ 2.8.20 raus * apt-get install libqt4-dev (*)
Josef
(*) Dieses Paket hat eine Abhängigkeit auf lug-dd-humour.
Hallo Liste, Josef, erstmal Danke für die schnelle Hilfe.
Am Donnerstag, 20. Juli 2006 15:27 schrieb Josef Spillner:
./.libs/libgtk-x11-2.0.so: undefined reference to `g_type_register_static_simple'
Das sieht nach glib aus. Lösungsvorschläge:
- glib 2.12 installieren, kam zusammen mit Gtk+ 2.8.20 raus
Hab ich gemacht, aber der Fehler bleibt.Gibt es noch etwas zu beachten? vielleicht n bestimmtes Verzeichnis?Hab es über Configure; Make; Make install installiert...
- apt-get install libqt4-dev (*)
Geht nicht, habe SUSE 10 drauf....seit 12 tagen ^^also Anfänger.
MfG Marko Roch
Hi,
On Saturday 22 July 2006 19:48, Roch Marko wrote:
Am Donnerstag, 20. Juli 2006 15:27 schrieb Josef Spillner:
./.libs/libgtk-x11-2.0.so: undefined reference to `g_type_register_static_simple'
Das sieht nach glib aus. Lösungsvorschläge:
- glib 2.12 installieren, kam zusammen mit Gtk+ 2.8.20 raus
Hab ich gemacht, aber der Fehler bleibt.Gibt es noch etwas zu beachten? vielleicht n bestimmtes Verzeichnis?Hab es über Configure; Make; Make install installiert...
Hmm, das sollte es eigentlich automatisch lokalisieren - hat das configure von gtk irgendwelche Fehler ausgegeben?
- apt-get install libqt4-dev (*)
Geht nicht, habe SUSE 10 drauf....seit 12 tagen ^^also Anfänger.
Ok, Qt4 ist dort auch dabei... ;-)
(man kann Qt3.x und 4.x problemlos parallel installieren)
Selbst auf die Gefahr hin, dass ein Kommando wütender Gnome mich vor der Haustür zusammenschlägt: falls Du versuchst GTK zu installieren, um selbst GUIs bauen zu können, dann würde ich Dir empfehlen lieber auf Qt umzusteigen: a) es hat weniger Abhängigkeiten, b) es ist um Größenordnungen einfacher zu lernen, c) es gibt hier in DD genug Leute, die Dir bei Problemen helfen können, etc.pp.
Konrad
Alle 19:48, sabato, 22. luglio 2006, Roch Marko ha scritto:
Hab ich gemacht, aber der Fehler bleibt.Gibt es noch etwas zu beachten? vielleicht n bestimmtes Verzeichnis?Hab es über Configure; Make; Make install installiert...
Er muss es natürlich auch finden. Gute configure-Skripte (das von Gtk+ in dem Fall) schauen zuerst in /usr/local nach, denn andere gute configure-Skripte (von glib) installieren dorthin, um die Systeminstallation unter /usr nicht kaputt zu machen. Richtig gute configure-Skripte sagen sogar, wo sie ihre Abhängigkeiten gefunden haben. Andererseits kann man das auch später nachprüfen, indem man in die Makefiles schaut.
Was sagt denn: # pkg-config --cflags glib-2.0 ?
Bei SUSE sind allerdings einige Dinge von GNOME unter /opt/gnome installiert. Ob da auch Gtk+ dazugehört, müsstest du selbst mal nachprüfen.
Wenn es gar nicht geht, hole dir Gtk+ und alle Abhängigkeiten (auch GDK, Pango etc.) von der Gtk-Seite und installiere jeweils mit --prefix=/usr/local/funktionierendes_gtk/.
Geht nicht, habe SUSE 10 drauf....seit 12 tagen ^^also Anfänger.
Wenn du schnellstmöglich deinen Status von 'Anfänger' auf 'Guru' erhöhen möchtest, und auch noch nahezu kostenfrei, dann werde Mitglied im berühmt-berüchtigten Organisationsteam des Linux-Info-Tag Dresden. Da kannst du mithelfen, den Leuten Kenntnisse über nicht-Windows-Systeme zu vermitteln, ohne dass du selbst schon viel wissen musst, denn für die Organisation werden immer fleißige Hände gebraucht.
Und wenn wir mehr Leute haben, die mit organisieren, haben wir auch wieder mehr Zeit zum Fragen beantworten.
Josef
Hallo,
Am Mittwoch, 26. Juli 2006 16:46 schrieb Josef Spillner:
Alle 19:48, sabato, 22. luglio 2006, Roch Marko ha scritto:
Wenn es gar nicht geht, hole dir Gtk+ und alle Abhängigkeiten (auch GDK, Pango etc.) von der Gtk-Seite und installiere jeweils mit --prefix=/usr/local/funktionierendes_gtk/.
Danke für die Tips. Problem gelöst, lag an fehlenden Paketen für Glib,welche Glib aber bei Configure nicht angezeigt hat.
Brauchte Gtk für dvd::rip wo ich auch noch n Problem habe , aber da mach ich nen neuen Thread....!?
Geht nicht, habe SUSE 10 drauf....seit 12 tagen ^^also Anfänger.
Wenn du schnellstmöglich deinen Status von 'Anfänger' auf 'Guru' erhöhen möchtest, und auch noch nahezu kostenfrei, dann werde Mitglied im berühmt-berüchtigten Organisationsteam des Linux-Info-Tag Dresden. Da kannst du mithelfen, den Leuten Kenntnisse über nicht-Windows-Systeme zu vermitteln, ohne dass du selbst schon viel wissen musst, denn für die Organisation werden immer fleißige Hände gebraucht.
Will zwar net gleich n Guru werden, aber bissl was lernen. Wäre auch net abgeneigt mich zur Verfügung zu stellen, solange ich keinen Vortrag halten muß :o)
MfG Marko Roch
On Fri, Jul 28, 2006 at 07:24:42PM +0200, max mueller wrote:
Will zwar net gleich n Guru werden, aber bissl was lernen. Wäre auch net abgeneigt mich zur Verfügung zu stellen, solange ich keinen Vortrag halten muß :o)
Konrad, notier dir die Adresse! :)
halbernst, Ulf
Alle 19:24, venerdì, 28. luglio 2006, max mueller ha scritto:
Brauchte Gtk für dvd::rip wo ich auch noch n Problem habe , aber da mach ich nen neuen Thread....!?
Neuer Thread -> gute Idee.
Will zwar net gleich n Guru werden, aber bissl was lernen. Wäre auch net abgeneigt mich zur Verfügung zu stellen, solange ich keinen Vortrag halten muß :o)
Sehr schön. Das nächste Treffen findet am 3. August um 19:15 Uhr in der Bibliothek SLUB statt. Wenn du um die Zeit vorn im Eingangsbereich wartest, kannst du uns nicht übersehen. Ansonsten stehen die weiteren Treffen hier: http://wiki.silmor.de/lit/ (Anmeldedaten stehen im aufklappenden Dialog).
Das gilt natürlich auch für andere potentielle Mitmacher.
Josef
Hallo,
nur nochmal zur Erinnerung:
Der CCC Dresden lädt ein:
- Themenabend Python und Twisted * * *
Termin: 28. Juli 2006, 19.00 Uhr
Ort: Berufsakademie Dresden Raum G3 Heideparkstr. 8 01099 Dresden
Es werd die letzten drei Ausgaben der Datenschleuder zum Verkauf angeboten. Die Mateversorgung ist leider noch unklar.
Wer die gezeigten Programmbeispiele nachvollziehen möchte, sollte einen Laptop mit installiertem Python 2.4 inklusize Dokumentation. Wer sich die Mühe machen möchte, kann auch Twisted installieren (irgendeine Version größer als 2.0).
Bis morgen Frank Benkstein.
lug-dd@mailman.schlittermann.de