2013-05-06 10 views
7

Istnieje następujących prostego kodu:Python 2.7 na Windows, "dochodzić main_name nie sys.modules, main_name" dla wszystkich Multiprocessing przykładów

from multiprocessing import Process, freeze_support 

def foo(): 
    print 'hello' 

if __name__ == '__main__': 
    freeze_support() 
    p = Process(target=foo) 
    p.start() 

to działa dobrze na Linux lub Windows z Python 3.3, ale nie na Windows z Pythonem 2.7.

Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "c:\Python27\lib\multiprocessing\forking.py", line 346, in main 
    prepare(preparation_data) 
    File "c:\Python27\lib\multiprocessing\forking.py", line 454, in prepare 
    assert main_name not in sys.modules, main_name 
AssertionError: thread 

Ogólnie rzecz biorąc, wszystkie przykłady przetwarzania wieloprocesowego, które próbowałem zawiodły w tej konfiguracji. Czemu?

Odpowiedz

10

Jest to znany bug:

http://bugs.python.org/issue10845

Nie wiem, czy będzie to kiedykolwiek przeniesiony do 2.7.X.

+2

Zostanie to naprawione w wersji 2.7.11 - https://hg.python.org/cpython/rev/5d88c1d413b9/ –

+0

@techtonik Dziękujemy za wskazówkę. Czy to znaczy, że moduł 'multiprocessing' jest niedostępny w wersjach <= 2.7.10? – Zelong

+0

@Zelong jest dostępny, może nie działać poprawnie w tych przypadkach. –