2012-04-11 27 views
0

Ich habe einen Code, der mehrere Male verarbeitet werden sollte (Multiprocessing), und die Ausgabe von jedem der mehreren Prozesse sollte in einem gemeinsamen Speicher gespeichert und dann entsprechend verarbeitet werden.Multiprocessing/Multithreading in Python ..?

Jeder einzelne Prozess führt ein Stück Code aus (verwaltet ein Wörterbuch) und Seite an Seite sollte jeder Prozess die Daten in einem gemeinsamen Speicher speichern (entweder nebeneinander oder wenn nicht möglich, dann hinterlegen Sie das gesamte Wörterbuch im letzte.)

Für .EG

process1 -> dict1, 
process2 -> dict2, 
process3 -> dict3 

>main_dict = dict1 + dict2 + dict3 

ich dieses Stück Code in Python bin ausführen.

Ich kann Multi-Threading auch hier machen, aber Multithreading ist nicht so parallel wie ich gehört habe ... Also kann ich Multiprocessing machen. Bitte sagen Sie mir den Prozess als diese Art von Szenario ohne verschwenden zu viel Zeit in Multiprozessor-Modus zu halten oder Verlassen der Prozessor ideal ..

Dank

Antwort

0

Blick auf das subprocess Modul.

In der Dokumentation sind viele Beispiele, was Sie damit machen können.
Schließlich, dass Sie mit Ihrem Problem helfen könnte ...

+0

Subprozess ist besser geeignet, um externe Befehle zu starten, OP scheint Python-Code zu verwenden. –

+0

ich denke, der einfachste/beste Weg wäre immer noch Multithreading zu verwenden ... – evotopid

+0

-1. Echo Cedric Julien. –

6

Sie werden am multiprocessing Modul aussehen zu wollen, obwohl ich glaube nicht, dass Sie mit Wörterbücher in Python Shared Memory tun kann - ich glaube, Sie müssen sie serialisieren und über eine Warteschlange senden.

Multi-Threading ist nicht so parallel tatsächlich, wie ich von ... gehört haben, also kann ich für Multiprozessing gehen. Bitte sagen Sie mir den Prozess als diese Art von Szenario ohne verschwenden zu viel Zeit in Multiprocessing-Modus zu halten oder den Prozessor ideal verlassen ..

Wenn Sie den Prozessor nicht verlassen dann wollen Sie nicht werde zusätzliche Parallelität erhalten, außer du bist IO-gebunden.

Was das bedeutet ist, dass, wenn Sie eine große Menge an CPU-Arbeit dann auf dem gleichen Prozessor zu bleiben tun und tun Multiprozessing werden Sie nur langsam nach unten. Die einzige Möglichkeit, die Parallelität zu erhöhen, besteht darin, zu anderen Prozessoren zu wechseln. (Auch wenn es sich um "virtuelle" Hyperthread-CPUs handelt.)

Wenn Sie andererseits verlangsamt werden, indem Sie Daten aus dem Speicher oder einem Netzwerk lesen (was nicht der Fall zu sein scheint), lautet die threading Modul wäre vernünftiger. Aber es erhöht nicht Ihre CPU-Parallelität aufgrund der GIL

Kurz gesagt: Sie fragen nach widersprüchlichen Dingen. Finde heraus, was du wirklich brauchst und wähle dann einen Ansatz.