2012-10-06 71 views
1
import threading, time 

class test(threading.Thread):     

    def __init__(self,name,delay): 
     threading.Thread.__init__(self) 
     self.name = name 
     self.delay = delay 

    def run(self): 
     c = 0 
     while True: 
      time.sleep(self.delay)    
      print 'This is thread %s on line %s' %(self.name,c) 
      c = c + 1 
      if c == 15: 
       print 'End of thread %s' % self.name 
       break 

one = test('one', 1).start() 
two = test('two', 3).start() 

one.join() 
two.join() 

print 'End of main' 

问题:无法获得参加()方法才能正常工作,提供了以下错误:蟒蛇 - 多线程 - join()方法

Traceback (most recent call last)line 29, in <module> join() NameError: name 'join' is not defined 

如果我删除:

one.join 
two.join 

代码工作得很好。

我想打印的最后一行,

print 'End of main' 

两个线程都结束之后。我似乎无法理解为什么join()不是这两个实例的属性?

+0

您intendation拧。 –

+0

抱歉 - 新手在这里。我试过 – mrdigital

+0

我的意思是在你的文章中。我认为你的程序看起来不一样,否则你不会走得那么远。 –

回答

4
one = test('one', 1).start() 
two = test('two', 3).start() 

您的问题是start()没有做一个return selfonetwo不是线程。他们是None或任何返回值start()实际上是。

这工作:

one = test('one', 1) 
one.start() 
two = test('two', 3) 
two.start() 
+1

那次你打败了我;) –

+0

你们都打败了我。 SO说23秒! – rbanffy

+0

太棒了!没有意识到这与RETURN更重要,我更关注代码缩短。无论如何,谢谢 – mrdigital