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()

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

  • 相关阅读:
    Release和Debug的区别[转]
    SVM运用到多分类[引]
    HMM
    [转] 数据挖掘 机器学习 模式识别的关系
    [转]mysql 数据导入
    java 获取当前时间戳
    二叉树遍历建树[zhuan]
    关于c指针[转]
    词法分析
    组合数据类型练习,综合练习
  • 原文地址:https://www.cnblogs.com/natian-ws/p/7459080.html
Copyright © 2011-2022 走看看