Implementieren eines Servers mit mehreren Prozessen in Python mit Twisted

8

Ich muss einen CPU-gebundenen Server in Python schreiben, um Workloads für viele Kerne zu verteilen. Ich möchte Twisted als Server verwenden (Anfragen über TCP).

Gibt es bessere Möglichkeiten - vielleicht mit Ampulle? Ich habe auch einen Artikel gesehen, der Twisteds pb für die Kommunikation in Verbindung mit Popen verwendet - oder vielleicht mit multiprocessing kombinieren?

    
zaharpopov 20.05.2011, 18:28
quelle

1 Antwort

10

Ampulle ist ein guter Baustein für einen Multiprozessor-CPU-gebundenen Server. Es verwendet das einfachere AMP-Protokoll anstelle von PB (dessen Komplexität normalerweise nicht benötigt wird, um Auftragsdaten in einen anderen Prozess zu verschieben und dann die Ergebnisse abzurufen). Es behandelt die Erstellung von Prozessen, die Verwaltung der Lebensdauer, den Neustart usw.

Sie sollten generell vermeiden, das Popen oder das multiprocessing Standardbibliotheksmodul zu verwenden, wenn Sie Twisted verwenden. Sie können zusammenarbeiten, aber sie stellen beide blockierungsorientierte APIs dar, die den Zweck, Twisted zu verwenden, etwas zunichte machen. Die native Child-Prozess-API von Twisted ist reactor.spawnProcess genauso leistungsfähig und verhindert Blockierungen. Die Ampulle basiert darauf.

Die Ampulle wird nicht so häufig verwendet wie multiprocessing . Sie können feststellen, dass es in Ihren Entwicklungs- oder Implementierungsumgebungen einige Eigenheiten hat. Ich denke nicht, dass dies Hindernisse sind, die Sie jedoch nicht überwinden können. Ich entwickelte einen Dienst, der Ampulle verwendete, um die Arbeit des Parsing großer Mengen von HTML über mehrere CPUs zu verteilen, und es funktionierte schließlich gut. Wenn Sie irgendwelche Probleme finden, obwohl ich Sie ermutigen melden sie upstream ! Irgendwann würde ich gerne sagen können, dass Ampulle so robust ist wie alles (oder mehr), anstatt einen Haftungsausschluss über seine Verwendung hinzuzufügen. :)

    
Jean-Paul Calderone 20.05.2011, 19:05
quelle