zoukankan      html  css  js  c++  java
  • 线程

     1 #!/usr/bin/env python
     2 #coding:utf-8
     3 
     4 import time
     5 
     6 from threading import Thread
     7 
     8 def foo(arg,v):
     9     for item in range(100):
    10         print item
    11         time.sleep(1)
    12 
    13 print 'before'
    14 t1 = Thread(target=foo,args=('addfa',11,))#将线程与方法联系起来,两者建立关系,该格式的固定格式,前者是函数名,后者是要传递的参数,后面需要逗号,说明是个序列
    15 
    16 t1.setDaemon(True)#在执行线程之前确定
    17 #设置为后台线程或前台线程(默认Flase)
    18 #如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,均停止
    19 #如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止
    20 
    21 t1.start()
    22 #print t1.getName()#获得线程的名字
    23 #t1.join(5)#逐个执行每个线程,执行完毕后继续往下执行,该方法使得多线程变得无意义,加上参数之后变成先执行5个,然后再继续向下执行
    24 print t1.isDaemon()
    25 
    26 print 'after'
    27 print 'after'
    28 print 'after'
    29 time.sleep(10)
    30 
    31 
    32 
    33 #主线程从上往下执行,当主线程创建子线程之后,然后主线程再继续往下走,不去管子线程。就算主线程执行完了,也得等子线程执行完了才能结束程序。
     自定义线程类
    1
    #!/usr/bin/env python 2 #coding:utf-8 3 4 from threading import Thread 5 import time 6 7 class mythread(Thread): 8 def run(self): 9 time.sleep(10) 10 print '我是线程' 11 12 13 def bar(): 14 print 'bar' 15 16 17 t1 = mythread(target=bar())#不加参数是可以只写一个参数,自定义线程类跟不自定义的参数是不一样的 18 t1.start() 19 20 print 'over'

    生产者消费者

     1 #!/usr/bin/env python
     2 #coding:utf-8
     3 
     4 from threading import Thread
     5 from Queue import Queue
     6 import time
     7 
     8 class procuder(Thread):#生产者
     9     #def __init__(self, group=None, target=None, name=None,args=(), kwargs=None, verbose=None):
    10         #super(procuder).__init__(self, group=None, target=None, name=None,args=(), kwargs=None, verbose=None)
    11 
    12     def __init__(self,name,queue):
    13         self.__name=name
    14         self.__queue=queue
    15         super(procuder, self).__init__()
    16         '''
    17         @:param name:生产者的名字
    18         @:param queue:容器
    19         '''
    20     def run(self):
    21         while True:
    22             if self.__queue.full():
    23                 time.sleep(1)
    24             else:
    25                 self.__queue.put('baozi')
    26                 print '%s 生产了一个包子'%(self.__name,)
    27         #Thread.run(self)
    28 
    29 
    30 
    31 class consumer(Thread):#消费者
    32     def __init__(self,name,queue):
    33         self.__name=name
    34         self.__queue=queue
    35         super(consumer,self).__init__()
    36         '''
    37         @:param name:消费者的名字
    38         @:param queue:容器
    39         '''
    40     def run(self):
    41         while True:
    42             if self.__queue.empty():
    43                 time.sleep(1)
    44             else:
    45                 self.__queue.get()
    46                 print '%s 消费了一个包子' % (self.__name,)
    47         #Thread.run(self)
    48 
    49 que=Queue(maxsize=100)#队列最大存放100个数据
    50 
    51 #三个生产者
    52 laogou1=procuder('老狗1',que)
    53 laogou1.start()
    54 laogou2=procuder('老狗2',que)
    55 laogou2.start()
    56 laogou3=procuder('老狗3',que)
    57 laogou3.start()
    58 
    59 #20个消费者
    60 for item in range(20):
    61     name='chentao%d'%(item,)
    62     temp=consumer(name,que)
    63     temp.start()
    64 
    65 
    66 
    67 
    68 
    69 
    70 
    71 
    72 '''
    73 print que.qsize()
    74 que.put('1')#往队列放数据
    75 que.put('2')
    76 print que.empty()
    77 print que.qsize()
    78 print que.get()#一次只能拿一个参数
    79 print que.get()
    80 print que.empty()#看队列是否为空
    81 '''
    进程锁
    1
    #!/usr/bin/env python 2 #coding:utf-8 3 4 import threading 5 import time 6 7 num=0 8 9 def run(n): 10 11 time.sleep(1) 12 global num 13 14 lock.acquire()#获取锁,独占cpu操作,需要操作的时候再加上锁 15 num+=1 16 print '%s '%num 17 lock.release()#释放锁 18 19 lock=threading.Lock()#加上锁 20 21 #samp=threading.BoundedSemaphore(4)#允许同时有多少个线程进去 22 23 for i in range(100): 24 t=threading.Thread(target=run,args=(i,)) 25 t.start() 26 27 ''' 28 def run(n): 29 30 time.sleep(1) 31 global num 32 global num2 33 lock.acquire() 34 num+=1 35 lock.acquire() 36 num2+=2 37 print '%s '%num 38 lock.release() 39 lock.release() 40 这种情况就是同时打开两把相同的锁之后不知道该怎么办了,此时就需要使用RLock,可以允许同时获得几个锁,打开几把锁就需要关闭几把锁 41 lock=threading.RLock() 42 '''
  • 相关阅读:
    jQuery事件对象event的属性和方法
    使用CSS3动画库animate.css
    Git常用命令整理
    模拟现实物理效果
    数组排序之选择排序
    数组排序之冒泡排序
    小方块靠着浏览器运动
    轮播图片, 不用滚动视图, 也不用时间计时器
    UIActionSheet
    自动计算高度的方法 iOS, height为0, 可以自动计算weith,
  • 原文地址:https://www.cnblogs.com/bill2014/p/6919786.html
Copyright © 2011-2022 走看看