zoukankan      html  css  js  c++  java
  • [python 学习] python 多线程

    1、

    # -*- coding: utf-8 -*-
    import threading
    import time
    import random
    
    def go(name):
        for i in range(2):
            integer = random.randint(0,10)
            print u'{} 前进{} 步.'.format(name,integer)
            time.sleep(2)
    
    def back(name):
        for j in range(500):
            integer = random.randint(0,10)
            print u'{} 后退{} 步.'.format(name,integer)
            time.sleep(1)
      
    if __name__ == '__main__':
        t1 = threading.Thread(target=go,args=('go',))
        t2 = threading.Thread(target=back,args=('back',))  
        t1.start()
        t2.start()
        print 'stop stop stop'

    上面的 go() 和 back() 交替休眠,谁获得执行权谁执行。(教随机)

    2、经典的生产者消费者,两个线程能够 " 沟通 " 。

    # -*- coding: utf-8 -*-
    import threading
    import time
    import random
    import sys
    
    def product(condition):
        global integers
        while True:
            condition.acquire() #获得锁 
            print u'狗粮生产机启动.................................'
            while integers < 100:
                time.sleep(1)            
                integer = random.randint(0,10) #生产
                integers = integers + integer
                print u'生产了 {} 颗狗粮,总共 {} 颗狗粮'.format(integer,integers)
                if integer in [6,8]:
                    print u'上次生产了 {} 颗狗粮,狗粮生产机要休息休息了,唤醒单身去吃狗粮'.format(integer)
                    break
            print u'狗粮生产机停止................................'
            condition.notify() #通知
            #condition.wait()
            condition.release() #释放锁
    
    def customer(condition):
        global integers
        while True:
            condition.acquire() #获得锁
            while integers > 0:
                time.sleep(1)            
                integer = random.randint(0,10)
                integers_tmp = integers - integer
                if integers_tmp < 0:
                    integer = integers
                    integers = 0
                    print u'单身狗吃 {} 颗狗粮,没有狗粮,汪汪汪...'.format(integer)                
                else:
                    integers = integers - integer
                    print u'单身狗吃 {} 颗狗粮,还有 {} 狗粮.'.format(integer,integers)
            condition.notify() #通知
            #condition.wait()
            condition.release()#释放锁
      
    if __name__ == '__main__':
        integers = 0
        condition = threading.Condition()
        t1 = threading.Thread(target=product,args=(condition,))
        t2 = threading.Thread(target=customer,args=(condition,))  
        t1.start()
        t2.start()

    上面的狗粮生产机(生产者)和单身狗(消费者),一个生产狗粮,一个吃狗粮。

  • 相关阅读:
    tornado web 框架的认识
    JavaScript 作用域知识点梳理
    服务器
    git——学习
    webservice——和API接口
    celery——任务调度模块
    supervisor——进程管理工具
    Python常用的语句
    数据类型比较总结
    字符集和字符编码问题
  • 原文地址:https://www.cnblogs.com/natian-ws/p/7459080.html
Copyright © 2011-2022 走看看