66794


Pythonについて。

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

『10.3.3 terminate()によるプロセスの強制終了』より。

以下のプログラムは、  
1から100万まで数えるものです。  
ただし、1ステップごとに1秒眠ります。  
そして、5秒経つとterminate()により強制終了するというものです。

[code]

    import multiprocessing
    import time
    import os
    
    def whoami(name) :
        print("I'm %s, in process %s" % (name, os.getpid())
    
    def loopy(name) :
        whoami(name)
        start = 1
        stop = 1000000
        for num in range(start, stop) :
            print("\tNumber %s of %s. Honk!" % (num, stop))
            time.sleep(1)
    
    if __name__ == "__main__" :
        whoami("main")
        p = multiprocessing.Process(target=loopy, args=("loopy",))
        p.start()
        time.sleep(5)
        p.terminate()
    
[/code]

このプログラムを実行すると、  
たとえば次のような出力が得られるはずでした。

[code]

    I'm main, in process 97080
    I'm loopy, in process 97081
        Number 1 of 1000000. Honk!
        Number 2 of 1000000. Honk!
        Number 3 of 1000000. Honk!
        Number 4 of 1000000. Honk!
        Number 5 of 1000000. Honk!
    
[/code]

しかし、実行すると、次のエラーが発生しました。

[code]

     def loopy(what) :
        ^
    SyntaxError: invalid syntax
    
[/code]

ここで質問です。  
私はなにを見落としているのでしょうか？

この業界は初心者ですので、言葉や言葉の使い方が正確ではないことがあります。  
この質問文で気になったことがございましたら、何なりとご指摘くださいませ。  
それは、自身の成長のために必要なことだと思っております。


CC BY-SA 4.0
2020-05-19T18:25:03.673
66791
2020-05-19T23:08:00.490
2020-05-19T22:56:43.193
19110
39908
question
python python-multiprocessing
multiprocessingモジュールのterminate()による、プロセスの強制終了について


単純にtypoですね。

`def whoami(name) :`の`print("I'm %s, in process %s" % (name,
os.getpid())`に最後の`)`が不足しています。それを追加すれば動作します。

このくらいの小さな機能確認プログラムでは有っても無くても差は無いですが、`p.terminate()`の後に`p.join()`でちゃんと子プロセスが終了したのを待つ処理を追加するのも良いでしょう。  
[プロセスを終了する - multiprocessing
の基本](http://ja.pymotw.com/2/multiprocessing/basics.html#id5)


CC BY-SA 4.0
2020-05-19T22:55:22.017
66794
2020-05-19T23:08:00.490
2020-05-19T23:08:00.490
26370
26370
66791
answer