Asynchrone IO Bibliothek mit Enhanced Generators (PEP 342)

Du hast eine Idee für ein Projekt?
Antworten
maxi_king_333
User
Beiträge: 110
Registriert: Freitag 25. Dezember 2009, 03:42

Hallo,

Da ich meine Grooveshark API auf asynchrone Kommunikation umstellen wollte, um eine grafische Oberfläche dafür schreiben zu können, kam mir folgende Idee. Ich weiß nicht, ob es das schon gibt (im Internet habe ich zumindest nichts entsprechendes gefunden - aber vielleicht habe ich auch nicht nach dem richtigen gesucht). Und zwar fände ich eine Bibliotek schön, mit der man plattformübergreifend asynchrone Kommunikation betreiben kann, dabei soll es natürlich auch möglich sein, dass sich verschiedene GUI Toolkits verwenden lassen und somit eine Oberfläche in zum Beispiel in GTK oder auch QT geschrieben werden kann. Twisted geht da ja schon einen guten Weg, mit den verschiedenen Reaktoren für GTK, QT und verschiedene andere Plattformen und Toolkits. Jedoch bin ich dann über PEP342 gestolpert und finde die Idee irgendwie sehr gut, das nicht über Callbacks oder ähnliches zu machen, sondern das Ganze wie ein sequenzielles Programm schreiben zu können. Dazu dann noch eine Prise der Streams von Tornado und folgendes wäre möglich:

Code: Alles auswählen

@asynchronous
def examples():
    conenction, address = yield stream.accept()
    result = yield stream.read_until('protocol delimiter')
    response = yield urlopen('http://www.example.com/')
Besonders gut daran wäre, dass sich das Ganze (vor allem das letzte Beispiel) auf synchronen Betrieb umstellen ließe. Aus einem asynchronen yield urlopen könnte also auch schnell ein synchrones werden, was im Fall meiner Grooveshark API den Vorteil hätte, das ich ein einfaches Kommandozeilen Interface schreiben könnte, wobei halt gewartet wird, bis die API fertig abgefragt wurde.

Bevor ich jetzt anfange da massig Zeit zu investieren... Was haltet ihr davon oder gibt es schon so etwas?

Ich habe schon mal angefangen da schnell was zusammen zu klicken, ist noch nicht wirklich brauchbar und auch nicht gut programmiert, halt quick & dirty - sehr langsam, sobald ein Programm auf dem Stream aufsetzt: https://github.com/koehlma/lightasync

Viele Grüße
Maxi
Benutzeravatar
snafu
User
Beiträge: 6866
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ob es schon etwas gibt, was deinen Anforderungen entspricht, weiß ich nicht so genau.

Weshalb ich diesen Beitrag aber eigentlich schreibe: Seit Python 3.2 gibt es das Modul concurrent.futures.

Aus der Modulbeschreibung:
The concurrent.futures module provides a high-level interface for asynchronously executing callables.
Falls du es noch nicht kennst, dann wirf doch mal nen Blick dort hinein. Du möchtest vielleicht entweder Code daraus übernehmen oder direkt dessen Funktionalität in deinem Projekt benutzen. Nur so als kleiner Hinweis...
maxi_king_333
User
Beiträge: 110
Registriert: Freitag 25. Dezember 2009, 03:42

snafu hat geschrieben:Weshalb ich diesen Beitrag aber eigentlich schreibe: Seit Python 3.2 gibt es das Modul concurrent.futures.
Danke für den Hinweis... Kenne ich schon und gibt es ja erst ab Python 3.2 und ich wollte es eigentlich mit Python 2 kompatibel halten, außerdem basiert das ja auf Threads oder Prozessen - ich dachte da mehr an Events über EPoll und Konsorten. Werde es mir aber sicherlich trotzdem mal angucken, vor allem, wenn das mit den Events klappt, weil teils ja auch rechenintensive Tasks ausgeführt werden müssen und da passt das mit den Events ja nicht so gut.
snafu hat geschrieben:Falls du es noch nicht kennst, dann wirf doch mal nen Blick dort hinein. Du möchtest vielleicht entweder Code daraus übernehmen oder direkt dessen Funktionalität in deinem Projekt benutzen. Nur so als kleiner Hinweis...
Wenn das ein Projekt wird - ich möchte erstmal gucken ob jemand anders soetwas noch gebrauchen kann, bevor ich da viel Arbeit rein stecke...
Antworten