Multiprocessing Windows

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Funktioniert dieses Modul überhaupt mit Windows? Jeder meiner Versuche scheitert..
Hat jemand ggf. ein funktionierendes Beispiel (Win7, python27)?
Wahrscheinlich geht es mit Python 3 - 2.7 wird wohl nicht mehr unterschützt.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Bitte zeige Code, mit dem es nicht funktioniert und beschreibe, was genau nicht funktioniert. Nach 45 Beiträgen sollte man richtiges Fragen doch so langsam mal hinbekommen... :roll:

Wie dem auch sei. Es ist in der Tat so, dass man mit `multiprocessing` unter Windows etwas mehr falsch machen kann als unter Linux. Einige mögliche Fehlerquellen werden hier beschrieben. Wenn du etwas von den dort aufgeführten Punkten nicht verstehst, dann frag ruhig nach.

Abhängig von deinem Anwendungsfall kann es übrigens sinnvoll sein, einen Blick auf concurrent.futures zu werfen, inwiefern dieses möglicherweise als Alternative für dein Problem infrage kommt. Es ist IMHO einfacher zu verstehen und zu benutzen als `multiprocessing`. Für Python 2.x kannst du es z.B. hier herunterladen bzw `pip` benutzen.
Dami123 hat geschrieben:Wahrscheinlich geht es mit Python 3 - 2.7 wird wohl nicht mehr unterschützt.
Nichts für ungut, aber bitte erspare uns deine Mutmaßungen und lies die Dokumentation. Mit sowas setzt man auch schnell mal Gerüchte in die Welt, weil ein anderer Anfänger möglicherweise auf deinen Beitrag stößt und ihm beim Überfliegen des Threads dies im Kopf bleibt. Sowas ist nicht wirklich schön.
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Mein Anliegen belief sich hauptsächlich auf die Anfrage eines getesteten Scripts.
Aber natürlich hast du Recht, war nur etwas wütend über den erneut gescheiterten Versuch "multiprocessing" zum laufen zu bringen.

Nehmen wir als Beispiel diesen für Windows angefertigten Beispiel-Code:

Code: Alles auswählen

from multiprocessing import Process, freeze_support

def foo():
    print 'hello'

if __name__ == '__main__':
    freeze_support()
    p = Process(target=foo)
    p.start()
"hello" wird nicht ausgegeben.

Ärgerlich ist natürlich, dass die führenden Thread-Module funktionieren nur multiprocessing nicht.
Was ich aber nicht getested hab, ist eine objektorientierte Version mit multiprocessing, ggf. geht es nur so.

PS:
Multiprocessing möchte ich verwenden, da ich in meiner wxpython GUI Anwendung einen An/Aus Button integrieren möchte,
der ein laufendes Modul pausiert/beenden - fortsetzt/startet.
Zuletzt geändert von Dami123 am Sonntag 9. Juni 2013, 00:37, insgesamt 1-mal geändert.
BlackJack

@Dami123: Da fehlt am Ende ein ``p.join()`` damit das Programmende den Prozess für die Ausgabe nicht beendet bevor er etwas ausgeben konnte.
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Das ändert nichts.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Dami123 hat geschrieben:Das ändert nichts.
Ich habe dein Programm unter Windows XP mit cygwin und Python 2.7.3 und auch in der Windows Command Shell mit Python 2.7.2 ausprobiert und bei mir kam beide Male diese Ausgabe:

Code: Alles auswählen

hello
In specifications, Murphy's Law supersedes Ohm's.
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Danke für den Test.
Wie es aussieht funktioniert multiprocessing nicht mit IDLE.
Antworten