码迷,mamicode.com
首页 > 编程语言 > 详细

Python Thread related

时间:2015-09-06 17:40:34      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

1.Thread.join([timeout])

Wait until the thread terminates. This blocks the calling thread until the thread whose join() method is called terminates – either normally or through an unhandled exception – or until the optional timeout occurs.

等待进程结束。也就是说,其屏蔽调用线程,直到此线程方法终止(要么正常执行完毕,或者未处理的异常,或者时间超时)

下面通过例子来说明:

没有设定timeout情况,Main 线程启动,work1 和work2 线程执行,完毕退出,Main线程执行终止

技术分享
 1 import os
 2 import threading
 3 import time
 4 import logging
 5 import random
 6 
 7 def work1():
 8     count=0
 9     while count<=5:
10         threadname= threading.currentThread()
11         wait_time=random.randrange(1,4)
12         print("%s,count =%s wait for =%s s,time %s "%(threadname,count,wait_time,time.ctime()[-13:]))
13         time.sleep(wait_time)
14         count +=1
15      
16 def work2():
17     i=0
18     while i<=5:
19         threadname= threading.currentThread()
20         wait_time=random.randrange(1,4)
21         print("%s,i     =%s wait for =%s s,time %s "%(threadname,i,wait_time,time.ctime()[-13:]))
22         time.sleep(wait_time)
23         i +=1
24 
25 if __name__ =="__main__":
26     mainthread= threading.currentThread()
27     print %s main thread is waiting for exit% mainthread
28     test1=threading.Thread(name=work1,target=work1)
29     test2=threading.Thread(name=work2,target=work2)
30     test1.start()
31     test2.start()
32     test1.join()
33     test2.join()    
34     print main thread finish
View Code

 

  
技术分享

 

2个线程设定超时时间work1 5s,work2 4s,9s之后调用线程结束而不等待超时的线程:

技术分享
 1 import os
 2 import threading
 3 import time
 4 import logging
 5 import random
 6 
 7 def work1():
 8     count=0
 9     while count<=5:
10         threadname= threading.currentThread()
11         wait_time=random.randrange(1,4)
12         print("%s,count =%s wait for =%s s,time %s "%(threadname,count,wait_time,time.ctime()[-13:]))
13         time.sleep(wait_time)
14         count +=1
15      
16 def work2():
17     i=0
18     while i<=5:
19         threadname= threading.currentThread()
20         wait_time=random.randrange(1,4)
21         print("%s,i     =%s wait for =%s s,time %s "%(threadname,i,wait_time,time.ctime()[-13:]))
22         time.sleep(wait_time)
23         i +=1
24 
25 if __name__ =="__main__":
26     mainthread= threading.currentThread()
27     print %s main thread is waiting for exit% mainthread
28     test1=threading.Thread(name=work1,target=work1)
29     test2=threading.Thread(name=work2,target=work2)
30     test1.start()
31     test2.start()
32     test1.join(4)
33     test2.join(5)    
34     print main thread finish
View Code

 

技术分享

 2.Producer and comsumer

技术分享
 1 import Queue
 2 import threading
 3 import random
 4 
 5 #writelock =threading.Lock()
 6 class Producer(threading.Thread):
 7     def __init__(self,q,con,name):
 8         super(Producer,self).__init__()
 9         self.q = q
10         self.con = con
11         self.name = name
12         print "produce" +self.name+"started"
13     def run(self):
14         while 1:
15             #global writelock      
16             self.con.acquire()#acquire the lock   
17             if self.q.full():#if queue is full
18                #with writelock:#output info
19                print "queue is full, producer wait"
20                self.con.wait()#wait for resource
21             else:
22                 value = random.ranint(0,10)
23                 #with writelock:
24                 print self.name+"put value"+self.name+":"+str(value)+"into queue"
25             self.q.put((self.name+":"+str(value)))#put to queue
26             self.con.notify()#inform consumer
27         self.con.release()#release the lock
28         
29 class Consumer(threading.Thread):
30     def __init__(self,q,con,name):
31         super(Consumer,self).__init__()
32         self.q = q
33         self.con = con
34         self.name = name
35         print "consume" +self.name+"started\n"
36     def run(self):
37         while 1:
38             #global writelock
39             self.con.acquire()
40             if self.q.empty():#if empty
41                 #with writelock:
42                 print "queue is empty,consumer wait"
43                 self.con.wait()#wait the resource ready
44             else:
45                 value = self.q.get()#get one element from queue
46                 #with writelock:
47                 print self.name +"get value"+ value+"from queue"
48                 self.q.notify()#inform producer
49             self.con.release()#release the lock
50 
51 
52 if __name__ == "__main__":
53     print "start to run\n"
54     q = Queue.Queue(10)
55     con = threading.Condition()
56     p = Producer(q,con,"p1")
57     p.start()
58     p1 = Producer(q,con,"p2")
59     p1.start()
60     c1 = Consumer(q,con,"c1")
61     c1.start()
62 
63 
64         
65 
66         
67     
View Code

3.待续......

Python Thread related

标签:

原文地址:http://www.cnblogs.com/lxk613/p/4786270.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!