1

私はPythonが初めてで、Pythonでのマルチスレッドの概念を理解しようとしています. Unix マルチスレッド プログラミングに関する私の知識によると、メイン関数が終了すると、メイン関数によって作成されたスレッドも、スレッドで実行している作業に関係なく終了します (pthread_join() 関数を使用していない場合)。

しかし、 python でマルチスレッドを実行している間、私はこの機能を見ていません。メインスレッドが作業を完了しても、スレッドは引き続き正常に実行されています。PythonとUnixのスレッドの動作が異なることを知りたい...または何かが足りない. このスレッド機能を Python で理解するのを手伝ってください。Pythonで使用しているコードは次のとおりです。

#! /usr/bin/python
import logging
import random
import threading
import time

logging.basicConfig(level=logging.DEBUG,
                format='(%(threadName)-10s) %(message)s',
               )

class Counter(object):

def __init__(self, start=0):
    self.lock = threading.Lock()
    self.value = start

def increment(self):
    logging.debug('Waiting for lock')

    # Getting the Lock
    self.lock.acquire()
    try:
        logging.debug('Acquired lock')
        self.value = self.value + 1
    finally:
       # Releasing the Lock 
        self.lock.release()



def worker(c):
    for i in range(2):
        pause = 4 
        logging.debug('Sleeping for %0.02f', pause)
        time.sleep(pause)
        c.increment()
    logging.debug('Done')



if  __name__ == '__main__':
    counter = Counter()
    for i in range(2):
        t = threading.Thread(target=worker, args=(counter,))
        t.start()

    logging.debug('Counter: %d', counter.value)
4

3 に答える 3

1

Thread.daemon に関するドキュメントの内容を確認してください。「生きている非デーモン スレッドがなくなると、Python プログラム全体が終了します。」

于 2012-06-12T11:52:52.760 に答える
1

スレッドをデーモン スレッドにする必要があります

for i in range(2):
    t = threading.Thread(target=worker, args=(counter,))
    t.setDaemon(True)
    t.start()
于 2012-06-12T11:52:27.253 に答える
0

残念ながら、Python のスレッド化は、Linux のスレッド化とは少し異なります。さらに、GIL http://wiki.python.org/moin/GlobalInterpreterLockによると、同時に実行されているスレッドは 1 つだけです (!)

また... mainThread が終了すると、スレッドが次のように作成されていない限り、スレッドが終了するのを待ちsetDaemon(True)ますtryfinally:

于 2012-06-12T11:55:08.733 に答える