Ich bin mit asyncore nicht vertraut und habe sehr begrenzte Kenntnisse in der asynchronen Programmierung, abgesehen von einigen wenigen Vorbemerkungen verdrehte Tutorials.
Ich kenne Threads am besten und verwende sie in allen meinen Apps. Eine bestimmte App verwendet eine couchdb -Datenbank als Schnittstelle. Dies beinhaltet das Longpolling der db auf der Suche nach Änderungen und Updates. Das Modul, das ich für Couchdb verwende, ist couchdbkit . Es verwendet eine asyncore Schleife, um diese Änderungen zu beobachten und sie an einen Rückruf zu senden.
Also, ich denke, von diesem Callback aus starte ich meine Worker-Threads. Es scheint ein bisschen primitiv zu sein, asynchrone und threaded Programmierung zu mischen. Ich mag couchdbkit wirklich, aber würde lieber keine Probleme in mein Programm einführen.
Also, meine Frage ist, ist es sicher, Threads von einem Async-Callback zu feuern?
Hier ist ein Code ...
%Vor%Aktualisierung:
Nachdem ich mehr darüber gelesen habe, habe ich eine zusätzliche Frage an die couchdbkit-Gurus. Es wird möglicherweise Hunderte von Threads mit der Datenbank geben. Wie Sie in meinem Codebeispiel sehen können, instanziiere ich ein couchdbkit.Database-Objekt pro Thread. Ich denke, das könnte verschwenderisch sein. Also, ist es in Ordnung, wenn ein einzelnes Datenbankobjekt global unter den Threads verwendet wird?
Würde dies nicht jedes Mal einen neuen Thread erstellen, wenn der Server ein neues Dokument zurückgibt? Ich nehme an, dass Sie am besten einen Pool von Worker-Threads erstellen , bevor Sie alles auf dem Server aufrufen, und fügen Sie einfach einen Job zu der Warteschlange hinzu, aus der diese Threads ihre Arbeit in der dispatch
-Methode lesen .
Aber es gibt keinen Grund, warum Mischen Threading und asynchrone Programmierung als gefährlich angesehen werden sollte.
Tags und Links python multithreading couchdb asyncore