当前位置: 首页 > news >正文

进阶第二十一课 Python多线程

全文转发

http://www.cnblogs.com/fnng/p/3670789.html

多线程和多进程是什么自行google补脑

  对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂。所以,这里力图用简单的例子,让你对多线程有个初步的认识。

 

单线程

 

  在好些年前的MS-DOS时代,操作系统处理问题都是单任务的,我想做听音乐和看电影两件事儿,那么一定要先排一下顺序。

(好吧!我们不纠结在DOS时代是否有听音乐和看影的应用。^_^)

复制代码
from time import ctime,sleep

def music():
    for i in range(2):
        print "I was listening to music. %s" %ctime()
        sleep(1)

def move():
    for i in range(2):
        print "I was at the movies! %s" %ctime()
        sleep(5)

if __name__ == '__main__':
    music()
    move()
    print "all over %s" %ctime()
复制代码

   我们先听了一首音乐,通过for循环来控制音乐的播放了两次,每首音乐播放需要1秒钟,sleep()来控制音乐播放的时长。接着我们又看了一场电影,

每一场电影需要5秒钟,因为太好看了,所以我也通过for循环看两遍。在整个休闲娱乐活动结束后,我通过

print "all over %s" %ctime()

看了一下当前时间,差不多该睡觉了。

运行结果:

复制代码
>>=========================== RESTART ================================
>>> 
I was listening to music. Thu Apr 17 10:47:08 2014
I was listening to music. Thu Apr 17 10:47:09 2014
I was at the movies! Thu Apr 17 10:47:10 2014
I was at the movies! Thu Apr 17 10:47:15 2014
all over Thu Apr 17 10:47:20 2014
复制代码

  

  其实,music()和move()更应该被看作是音乐和视频播放器,至于要播放什么歌曲和视频应该由我们使用时决定。所以,我们对上面代码做了改造:

复制代码
#coding=utf-8
import threading
from time import ctime,sleep

def music(func):
    for i in range(2):
        print "I was listening to %s. %s" %(func,ctime())
        sleep(1)

def move(func):
    for i in range(2):
        print "I was at the %s! %s" %(func,ctime())
        sleep(5)



if __name__ == '__main__':
    music(u'爱情买卖')
    move(u'阿凡达')

    print "all over %s" %ctime()
复制代码

  对music()和move()进行了传参处理。体验中国经典歌曲和欧美大片文化。

运行结果:

复制代码
>>> ======================== RESTART ================================
>>> 
I was listening to 爱情买卖. Thu Apr 17 11:48:59 2014
I was listening to 爱情买卖. Thu Apr 17 11:49:00 2014
I was at the 阿凡达! Thu Apr 17 11:49:01 2014
I was at the 阿凡达! Thu Apr 17 11:49:06 2014
all over Thu Apr 17 11:49:11 2014
复制代码

 

转载于:https://www.cnblogs.com/tuobeiwoniu/p/8806303.html

相关文章:

  • 【ASP】简单Url编码和Url解码实例
  • Flannel网络组件部署
  • EXCEL应用技巧:如何在每行下插入一个空行
  • docker 关闭镜像后,容器无法启动---Conflict. The container nam
  • 【翻译】Nova国际化
  • stm 常用头文件
  • mysql中去重复记录
  • 开源母语编程 说明 (持续更新)
  • 你不懂js系列学习笔记-作用域和闭包- 03
  • Mac 平台下功能强大的Shimo软件使用指南
  • 初学redis分页缓存方法实现
  • Redis 安装及配置
  • chroot 命令小记
  • Bugzilla安装问题总结-神奇
  • js 原型链(转)
  • [译]前端离线指南(上)
  • 【EOS】Cleos基础
  • 【个人向】《HTTP图解》阅后小结
  • classpath对获取配置文件的影响
  • idea + plantuml 画流程图
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Lsb图片隐写
  • React+TypeScript入门
  • SQLServer之创建数据库快照
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用mpvue开发微信小程序
  • 函数计算新功能-----支持C#函数
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #13 yum、编译安装与sed命令的使用
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (未解决)macOS matplotlib 中文是方框
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)memcache、redis缓存
  • .gitignore文件设置了忽略但不生效
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .net反编译工具
  • .net专家(高海东的专栏)
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [\u4e00-\u9fa5] //匹配中文字符
  • [1127]图形打印 sdutOJ
  • [20190113]四校联考
  • [Android Studio] 开发Java 程序
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • [DAU-FI Net开源 | Dual Attention UNet+特征融合+Sobel和Canny等算子解决语义分割痛点]
  • [GDOUCTF 2023]<ez_ze> SSTI 过滤数字 大括号{等