进程与线程的区别:
进程不共享空间,线程共享地址空间 线程共享空间优缺点:
优点:多线程给用户的体验好些,打开时占用的内存比进程少
缺点:共享地址空间会相互干扰,甚至有影响
 import threading
import time class Mythreading(threading.Thread):
def __init__(self,threadID,name,counter):
threading.Thread.__init__(self) #固定格式
self.threadID = threadID
self.name = name
self.counter = counter
print("初始化完成")
def run(self): #由cpu来处理决定线程间的执行顺序
print("开始"+self.name)
print_time(self.name,self.counter,)
print("结束"+self.name) def print_time(threasName,counter,delay):
while counter:
time.sleep(delay)
print("%s:%s"%(threasName,time.ctime(time.time())))
counter -= #创建线程
thread1 = Mythreading(,"thread1",)
thread2 = Mythreading(,"thread2",) #开启线程
thread1.start()
thread2.start()
 import threading
import time class Mythreading(threading.Thread):
def __init__(self,threadID,name,counter):
threading.Thread.__init__(self) #固定格式
self.threadID = threadID
self.name = name
self.counter = counter
print("初始化完成")
def run(self): #由cpu来处理决定线程间的执行顺序
threadLock.acquire() #获得锁,成功获得锁定后返回True,可选的参数timeout不填时将一直阻塞直到获得锁定
print_time(self.name,self.counter,)
threadLock.release() #释放锁,开始下一个线程 def print_time(threasName,counter,delay):
while counter:
time.sleep(delay)
print("%s:%s"%(threasName,time.ctime(time.time())))
counter -= threadLock = threading.Lock()
threads = [] #创建线程
thread1 = Mythreading(,"thread1",)
thread2 = Mythreading(,"thread2",) #开启线程
thread1.start()
thread2.start() # thread1.join()
# thread2.join()
threads.append(thread1)
threads.append(thread2)
for t in threads:
t.join() #后边的代码必须等待,等线程运行完成才会往后运行代码 print("我的的花儿也谢了")

为什么下图左为串行,下图右为并行运行呢?

图左love启动后分别执行start和join,启动了join后边代码就需要等待前边代码运行完成。总共18s

图右同时启动love和hate,运行所需要执行的时间然后停止。总共10s

超级播放器示例,如下:

 import threading
from time import sleep, ctime
def music(func):
for i in range():
print ("I was listening to %s! %s" %(func,ctime()))
sleep()
def move(func):
for i in range():
print ("I was at the %s! %s" %(func,ctime()))
sleep() def player(name):
r = name.split('.')[]
if r=="mp3":
music(name)
elif r=="mp4":
move(name)
else:
print("%s is error!"%name) lists = ["love.mp3","hate.mp4","cuicui.mp3","nnnn.mp4"] threads = []
files = range(len(lists))
for i in files:
t = threading.Thread(target=player,args=(lists[i],))
threads.append(t) if __name__ == '__main__':
for i in files:
threads[i].start()
for i in files:
threads[i].join()
print ('all end: %s' %ctime())

生产者与消费者示例:

 import threading
class Produce(threading.Thread): def __init__(self,name):
threading.Thread.__init__(self)
self.name = name
def run(self):
global x
tt.acquire()
if x > : print("我不生产了")
else:
for i in range():
x +=
print("%s在生产中,第%d个"%(self.name,x))
tt.release() class Consume(threading.Thread):
def __init__(self,name):
threading.Thread.__init__(self)
self.name = name
def run(self):
global x
tt.acquire()
if x == : print("我不消费了")
else:
for i in range():
x -=
print("%s在消费中,第%d个"%(self.name,x+))
tt.release()
x =
tt = threading.Lock()
# tt = threading.Condition p = Produce("produce")
c = Consume("consume") p.start()
c.start() p.join()
c.join()

python自动化--语言基础线程、生产者消费者示例的更多相关文章

  1. Python自动化--语言基础7--操作日志、加密、发送邮件、线程、生产者消费者

    1.操作日志 logging.basicConfig:日志的统一处理器,对日志的输出格式和方式做配置日志级别等级CRITICAL > ERROR > WARNING > INFO & ...

  2. Python自动化--语言基础8--接口请求及封装

    基于http协议,最常用的是GET和POST两种方法. 接口文档需要包含哪些信息: 接口名称接口功能接口地址支持格式 json/xml请求方式请求示例请求参数(是否必填.数据类型.传递参数格式)返回参 ...

  3. Python自动化--语言基础5--面向对象、迭代器、range和切片的区分

    面向对象 一.面向对象代码示例: 1 class Test(): #类的定义 2 car = "buick" #类变量,定义在类里方法外,可被对象直接调用,具有全局效果 3 def ...

  4. Python自动化--语言基础4--模块、文件读写、异常

    模块1.什么是模块?可以理解为一个py文件其实就是一个模块.比如xiami.py就是一个模块,想引入使用就在代码里写import xiami即可2.模块首先从当前目录查询,如果没有再按path顺序逐一 ...

  5. python自动化--语言基础四模块、文件读写、异常

    模块1.什么是模块?可以理解为一个py文件其实就是一个模块.比如xiami.py就是一个模块,想引入使用就在代码里写import xiami即可2.模块首先从当前目录查询,如果没有再按path顺序逐一 ...

  6. Python自动化--语言基础6--模块操作之re、MySQL、Excel

    1.Python自有模块正则 import re # re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None print(re.match("aaa ...

  7. Python自动化--语言基础3--字典、函数、全局/局部变量

    字典 dict1 = {'name':'han','age':18,'class':'first'} print(dict1.keys()) #打印所有的key值 print(dict1.values ...

  8. Python自动化--语言基础2--运算符、格式化输出、条件语句、循环语句、列表、元组

    运算符包括:算术运算符.比较运算符.赋值运算符.逻辑运算符.成员运算符.身份运算符 算术运算符 %   取模(余数) //  取相除的整数部分 /   (5/2=2.5) 比较运算符 ==  等于 ! ...

  9. python自动化--语言基础1--数据类型及类型转换

    Python中核心的数据类型有哪些?变量(数字.字符串.元组.列表.字典) 什么是数据的不可变性?哪些数据类型具有不可变性数据的不可变是指数据不可更改,比如: a = ("abc" ...

随机推荐

  1. NA路由①

    Cisco设备的端口:     在Cisco的路由器上都有一个带外网管口(Console/AUX):     Con口主要用于本地的con线进行本地网管:     AUX口主要与Modem连接通过固话 ...

  2. 安装Nginx须要系统的辅助软件(linux)

    安装Nginx须要系统的辅助软件(linux): yum -y install make gcc gcc-c++ ncurses-devel yum -y install zlib zlib-deve ...

  3. 安装eclipse中html/jsp/xml editor插件以及改动html页面的字体

    近期在做android项目,用到了jquery mobile 框架以及phonegap,所以就会涉及一些html文件,可是html文件打开的方式是Text Editor ,而且打开之后一些html代码 ...

  4. 2016/1/20 笔记 1, 包 引入 static 已经补充到类里 2,继承

    继承  1,关键字 extends       2,子类自动继承父类非私有的属性和方法 也叫成员变量 成员方法       3,super代表的是父类 调用父类的方法 默认在构造函数中生成      ...

  5. BZOJ 1037: [ZJOI2008]生日聚会Party 四维DP

    1037: [ZJOI2008]生日聚会Party Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1650  Solved: 971[Submit][ ...

  6. Python获取CPU、内存使用率以及网络使用状态代码

    Python获取CPU.内存使用率以及网络使用状态代码_python_脚本之家 http://www.jb51.net/article/134714.htm

  7. 代理ip 测试

    Line #1218 : 101.232.208.245 - - [16/Jan/2018:02:47:34 +0800] "GET /?xltestdesfs HTTP/1.1" ...

  8. Lucas模板&快速幂模板

    /* *********************************************** Author :guanjun Created Time :2016/5/20 0:28:36 F ...

  9. 上百例Silverlight网站及演示汇总,供友参考

    毁灭2012 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 125  文章- 0  评论- 446  上百例Silverlight网站及演示汇总,供友参考   今天我将发现的Silverlig ...

  10. SparkSQL与Hive on Spark

    SparkSQL与Hive on Spark的比较 简要介绍了SparkSQL与Hive on Spark的区别与联系  一.关于Spark 简介 在Hadoop的整个生态系统中,Spark和MapR ...