1、

  1. # -*- coding: utf-8 -*-
  2. import threading
  3. import time
  4. import random
  5.  
  6. def go(name):
  7. for i in range(2):
  8. integer = random.randint(0,10)
  9. print u'{} 前进{} 步.'.format(name,integer)
  10. time.sleep(2)
  11.  
  12. def back(name):
  13. for j in range(500):
  14. integer = random.randint(0,10)
  15. print u'{} 后退{} 步.'.format(name,integer)
  16. time.sleep(1)
  17.  
  18. if __name__ == '__main__':
  19. t1 = threading.Thread(target=go,args=('go',))
  20. t2 = threading.Thread(target=back,args=('back',))
  21. t1.start()
  22. t2.start()
  23. print 'stop stop stop'

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

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

  1. # -*- coding: utf-8 -*-
  2. import threading
  3. import time
  4. import random
  5. import sys
  6.  
  7. def product(condition):
  8. global integers
  9. while True:
  10. condition.acquire() #获得锁
  11. print u'狗粮生产机启动.................................'
  12. while integers < 100:
  13. time.sleep(1)
  14. integer = random.randint(0,10) #生产
  15. integers = integers + integer
  16. print u'生产了 {} 颗狗粮,总共 {} 颗狗粮'.format(integer,integers)
  17. if integer in [6,8]:
  18. print u'上次生产了 {} 颗狗粮,狗粮生产机要休息休息了,唤醒单身去吃狗粮'.format(integer)
  19. break
  20. print u'狗粮生产机停止................................'
  21. condition.notify() #通知
  22. #condition.wait()
  23. condition.release() #释放锁
  24.  
  25. def customer(condition):
  26. global integers
  27. while True:
  28. condition.acquire() #获得锁
  29. while integers > 0:
  30. time.sleep(1)
  31. integer = random.randint(0,10)
  32. integers_tmp = integers - integer
  33. if integers_tmp < 0:
  34. integer = integers
  35. integers = 0
  36. print u'单身狗吃 {} 颗狗粮,没有狗粮,汪汪汪...'.format(integer)
  37. else:
  38. integers = integers - integer
  39. print u'单身狗吃 {} 颗狗粮,还有 {} 狗粮.'.format(integer,integers)
  40. condition.notify() #通知
  41. #condition.wait()
  42. condition.release()#释放锁
  43.  
  44. if __name__ == '__main__':
  45. integers = 0
  46. condition = threading.Condition()
  47. t1 = threading.Thread(target=product,args=(condition,))
  48. t2 = threading.Thread(target=customer,args=(condition,))
  49. t1.start()
  50. t2.start()

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

[python 学习] python 多线程的更多相关文章

  1. 1 python学习——python环境配置

    1 python学习--python环境配置 要学习python语言,光看书看教程还是不好,得动手去写.当然,不管学习什么编程语言,最佳的方式还在于实践. 要实践,先得有一个Python解释器来解释执 ...

  2. Python学习---Python安装与基础1205

    1.0. 安装 1.1.1. 下载 官网下载地址:https://www.python.org/downloads/release/python-352/ 1.1.2. 配置环境变量 因为在安装的时候 ...

  3. Python学习---Python下[元组]的学习

    元组是不可变的, 用小括号()定义,而且一旦定义 ,不可变[类型是tuple] [元组看做一个整体,不可拆分,不可赋值,但可以全部重新赋值] 通过圆括号,用逗号分隔,常用在使语句或用户定义的函数能够安 ...

  4. Python学习---Python的异步IO[all]

    1.1.1. 前期环境准备和基础知识 安装: pip3 install aiohttp pip3 install grequests pip3 install wheel pip3 install s ...

  5. Python学习--Python基础语法

    第一个Python程序 交互式编程 交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码. linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗 ...

  6. python学习-python入门

    开始学习python,开始记录. 第一个小程序:登陆系统 功能:1.通过文件名和密码导入用户名和密码~ 2.用户输入用户名和密码 3.将用户输入的用户名进行比对,先判断用户名是否在黑名单里面,如果在黑 ...

  7. Python学习——Python进程

    python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用的多进程包multiprocessing,只需要定 ...

  8. Python学习:python网址收集

    Python学习网址收集: 语法学习:http://www.cnblogs.com/hongten/tag/python/             http://www.liaoxuefeng.com ...

  9. python学习--python 连接SQLServer数据库(两种方法)

    1. python 学习.安装教程参照: http://www.runoob.com/python/python-tutorial.html 2. 集成开发环境 JetBrains PyCharm C ...

  10. Python学习--Python的了解与安装

    Python简介: Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python 由荷兰人Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 19 ...

随机推荐

  1. [CSP-S模拟测试]:打扫卫生(暴力)

    题目描述 有$N$头奶牛,每头那牛都有一个标号$P_i1\leqslant Pi\leqslant M\leqslant N\leqslant 40,000$.现在$Farmer\  John$要把这 ...

  2. [django]上下文管理器

    上下文管理器django提取context中的数据去供模板调用 需求: 所有的页面都需要一个特定的变量 本质: python函数 , 接收一个HttpRequest对象的参数 , 且返回的必须是一个字 ...

  3. windows 2008 gpt

    新服务器,4T硬盘,U盘安装Windows Server 2008 R2. 把2008的镜像用UltraISO写入U盘. 安装到分区那块,主分区200G,剩余分区系统自动给分为: 2T + 剩余 两块 ...

  4. Window7 系统下重新建立一个新分区

    为了方便使用,准备在原来分区上再分割出一个分区,步骤如下 首先右击计算机,选择管理打开计算机管理窗口,选择磁盘管理,当前窗口右侧会出现当前计算机所有已存在的分区列表. 选择要进行分区的磁盘,右击选择压 ...

  5. leetcode-mid-array-334 Increasing Triplet Subsequence-NO

    mycode   time limited class Solution(object): def increasingTriplet(self, nums): """ ...

  6. Linux内核调试方法总结之Jprobes

    Jprobes [用途] 类似于Kprobes和Return Probes,区别在于,Kprobes可以在任意指令处插入探针,Jprobes只在函数入口插入探针,而Return Probes则是在函数 ...

  7. linux设置开机启动程序?

    /etc/rc.d/init.d 是 /etc/init.d的目标链接. 如果/etc/rc.d下面没有 rc.local脚本文件, 则需要 手动创建: 而 /etc/bashrc 是在登陆bash ...

  8. 【转】mackbook wifi卡死未响应的问题

    原文:http://tieba.baidu.com/p/6140144143?traceid= 1. wifi未响应了,紧急处理法:打开活动监视器,搜索airportd,结束掉进程 2. 彻底解决办法 ...

  9. Phaser 源码分析

    Phaser 一个可重用的同步屏障,功能上与 CyclicBarrier 和 CountDownLatch 类似,但是支持更灵活的使用. 把多个线程协作执行的任务划分为多个阶段,编程时需要明确各个阶段 ...

  10. oracle 11g 数据库恢复技术 ---02 控制文件

    oracle 11g 数据库恢复技术 ---02 控制文件 SYS@ orcl >show parameter control_file NAME TYPE VALUE ------------ ...