Seite 1 von 1

Multiprocessing Windows

Verfasst: Samstag 8. Juni 2013, 00:23
von Dami123
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.

Re: Multiprocessing Windows

Verfasst: Samstag 8. Juni 2013, 05:00
von snafu
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.

Re: Multiprocessing Windows

Verfasst: Samstag 8. Juni 2013, 23:27
von Dami123
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.

Re: Multiprocessing Windows

Verfasst: Samstag 8. Juni 2013, 23:41
von 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.

Re: Multiprocessing Windows

Verfasst: Sonntag 9. Juni 2013, 00:38
von Dami123
Das ändert nichts.

Re: Multiprocessing Windows

Verfasst: Sonntag 9. Juni 2013, 00:55
von pillmuncher
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

Re: Multiprocessing Windows

Verfasst: Sonntag 9. Juni 2013, 18:19
von Dami123
Danke für den Test.
Wie es aussieht funktioniert multiprocessing nicht mit IDLE.