2012-06-12 8 views
1

Я новичок в python и попытаюсь понять концепцию многопоточности в python. В соответствии с моими знаниями в многопоточном программировании Unix, если основная функция завершается, потоки, созданные главной функцией, также прекращаются независимо от работы, которую они выполняют в потоке (если мы не используем какую-либо функцию pthread_join()), ,Неожиданное поведение при многопоточности в python

Но, проходя через многопоточность в 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) 
+0

Итак ... в чем ваш вопрос? Это действительно расплывчато. Вы описали функциональность, но здесь нет реального вопроса. –

ответ

1

Проверьте, что в документации говорится о Thread.daemon. «Вся программа Python завершается, когда не осталось живых потоков, не связанных с демонами».

0

К сожалению, потоки в python немного больше, чем потоки linux. Кроме того, как я знаю, согласно GIL http://wiki.python.org/moin/GlobalInterpreterLock, существует только один поток, работающий одновременно (!)

Также ... когда mainThread завершен, он будет ждать окончания потоков, если они не были созданы как setDaemon(True). остановите свои темы самостоятельно, например, try {код основной темы} finally: doSomethingToStopThreads()

Смежные вопросы