2012-01-27 14 views
0

私はPythonでマルチプロセッシングを学びたいと思っています。私はhttp://www.doughellmann.com/PyMOTW/multiprocessing/basics.htmlを読み始めました。ターゲット関数のインポートに関するセクションは理解できません。ターゲット関数のインポート|マルチプロセッシング

..次の文章は、何を意味している。特に

「__main__のチェックで、アプリケーションの主要部分をラッピングモジュールがインポートされると、それはそれぞれの子に再帰的に実行されていないことを保証します。」

例を挙げて詳細に説明できますか?

答えて

0

新しいプロセスを生成するとき、multiprocessingモジュールは__main__モジュールをインポートします。新しいプロセスを生成するコードがブロックif __name__ == '__main__'にラップされていない場合、メインモジュールをインポートすると、新しいプロセスが再び生成されます。そして、それで、無限に。 Windows上でこれを実行する

:この問題もあり"Safe importing of main module".を題したセクションでのマルチプロセッシング・ドキュメントに記載されている

、次の簡単な例を見つけることができますRuntimeError

from multiprocessing import Process 

def foo(): 
    print 'hello' 

p = Process(target=foo) 
p.start() 

結果。

そして、修正が使用することです:

if __name__ == '__main__':  
    p = Process(target=foo) 
    p.start() 
0
"""This is my module (mymodule.py)""" 

def sum(a,b): 
    """>>> sum(1,1) 
     2 
     >>> sum(1,-1) 
     0 
    """ 
    return a+b 

# if you run this module using 'python mymodule.py', run a self test 
# if you just import this module, you get foo() and other definitions, 
# but the self-test isn't run 
if __name__=='__main__': 
    import doctest 
    doctest.testmod() 
0

実行中のスクリプトは対話のための 'トップレベルの環境' にあることを確認します。

たとえば、ユーザーと対話したい(起動プロセス)場合は、メインであることを確認します。 Windowsでは

if __name__ == '__main__': 
    do_something() 
関連する問題