66834


『入門 Python3』を読みながら、JupyterLabを使ってPythonを学んでいます。  
OSはwindows10です。

『10.3.2 multiprocessingによるプロセスの作成』より。

まず、以下のコードが書かれたmp.pyというファイルを作ります。  
これは、`Process()`関数により、`do_this()`関数を4回実行させるものです。

[code]

    import multiprocessing
    import os
    
    def do_this(what) :
        whoami(what)
    
    def whoami(what) :
        print("Process %s says: %s" % (os.getpid(), what))
    
    if __name__ == "__main__" :
        whoami("I'm the main program")
        for n in range(4) :
            p = multiprocessing.Process(target=do_this, args=("I'm function %s" % n,))
            p.start()
    
[/code]

そして、実行すると以下のように表示されました。

[code]

    Process 12768 says: I'm the main program
    Process 16372 says: I'm function 1
    Process 2152 says: I'm function 0
    Process 10464 says: I'm function 2
    Process 1280 says: I'm function 3
    
[/code]

さてここで質問です。

このコードに、do_this()関数は必要なのでしょうか？  
試しに、このようにしてmp2.pyというファイルを作り、実行したところ、特にエラーも出ず実行されました。

[code]

    import multiprocessing
    import os
    
    def whoami(what) :
        print("Process %s says: %s" % (os.getpid(), what))
    
    if __name__ == "__main__" :
        whoami("I'm the main program")
        for n in range(4) :
            p = multiprocessing.Process(target=whoami, args=("I'm function %s" % n,))
            p.start()
    
[/code]

変更点は、`do_this()`関数の定義を削除したところと、`target`に`whoami`を入れたところの二点です。


CC BY-SA 4.0
2020-05-21T03:35:30.977
66833
2020-05-21T03:38:15.360
2020-05-21T03:36:45.113
19110
39908
question
python python-multiprocessing
multiprocessingモジュールによる、各プロセスの動かし方について


ふたつ目のプログラムでもひとつ目と同じような挙動をします。推測ですが、その参考書では `do_this`
関数でこの後更に複雑な処理を行うような形になっているのではないでしょうか。


CC BY-SA 4.0
2020-05-21T03:38:15.360
66834
2020-05-21T03:38:15.360
19110
66833
answer