66895
Pythonについて。

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

『11.1.3 スレッド』より。

まずは下のプログラムをご覧ください。  
これは、皿洗いと2つのスレッドで動く乾燥担当を、`queue.Queue()`で通信し合って動かすプログラムです。

```

    import threading, queue
    import time
    
    # 皿を5秒で洗う皿洗い担当を定義する。
    def washer(dishes, output) :
        for dish in dishes :
            print('Washing', dish, 'dish')
            time.sleep(5)
            output.put(dish)
    
    # 洗った皿を10秒で乾かす乾燥担当を定義する。
    def dryer(input) :
        while True :
            dish = input.get()
            print('Dryer', dish, 'dish')
            time.sleep(10)
            input.task_done()
    
    if __name__ == '__main__' :
    
        # 洗う皿のリストとキューを定義する。
        dishes = ['salad', 'bread', 'entree', 'dessert']
        dish_queue = queue.Queue()
    
        # 2つのスレッドを定義する。
        for n in range(2) :
            dryer_thread = threading.Thread(target=dryer, args=(dish_queue,))
            dryer_thread.start()
    
        # 皿洗いを開始し、キューで通信する。
        washer(dishes, dish_queue)
        dish_queue.join()
    
```

結果は以下の通りになりました。

```

    Washing salad dish
    Washing bread dish
    Dryer salad dish
    Washing entree dish
    Dryer bread dish
    Washing dessert dish
    Dryer entree dish
    Dryer dessert dish
    
```

ここで質問です。  
ここでいう『皿洗い担当』を動かしている者の正体はプロセスですか？

尚、言葉や言葉の使い方が正確ではないことがあります。  
本文中、気になることがございましたら、何なりとご指摘くださいませ。
CC BY-SA 4.0
2020-05-22T08:46:41.900
66880
2020-05-22T16:54:50.600
2020-05-22T11:32:14.383
19110
39908
question
python マルチスレッド
threadingモジュールとqueueモジュールの使用によるプログラムの挙動について
> 皿洗いと2つのスレッドで動く乾燥担当を、queue.Queue()で通信し合って動かすプログラムです。  
>  ここでいう『皿洗い担当』を動かしている者の正体はプロセスですか？

求めている答えは「メインスレッド(main thread)」でしょうか？

プログラム実行中のプロセス(process)では、暗黙に生成される1つのメインスレッドが処理を実行していきます。`thread.Thread`メソッドを呼び出すと、メインスレッドとは別の新しいスレッドを生成できます。

Pythonや多くのプログラミング言語では、プログラム上で別スレッドを明示的に生成しない限りはメインスレッドのみで動作するシングルスレッド・プログラムになります。このようなプログラムではプロセスとスレッドは
1:1 の関係となるため、わざわざメインスレッドという概念を持ち出さずに説明されるケースが多いです。
CC BY-SA 4.0
2020-05-22T16:45:46.893
66895
2020-05-22T16:54:50.600
2020-05-22T16:54:50.600
49
49
66880
answer