2012-06-12 49 views
1

我是python的新手,并尝试理解python中多线程的概念。根据我在Unix多线程编程方面的知识,如果main函数正在终止,那么由main函数创建的线程也将被终止,而不管他们在线程中所做的工作(如果我们不使用任何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()