发布时间:2019-07-13 11:37:12编辑:auto阅读(1173)
由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题。举个例子来说,比如要把100M的数据写入磁盘,CPU输出100M的数据只需要0.01秒,可是磁盘要接收这100M数据可能需要10秒,怎么办呢?有两种办法:
第一种是CPU等着,也就是程序暂停执行后续代码,等100M的数据在10秒后写入磁盘,再接着往下执行,这种模式称为同步IO;
另一种方法是CPU不等待,只是告诉磁盘,“您老慢慢写,不着急,我接着干别的事去了”,于是,后续代码可以立刻接着执行,这种模式称为异步IO
同步和异步的区别就在于是否等待IO执行的结果。
异步的好处是程序性能高,缺点是编程模型复杂。
想看,你得知道什么时候通知你“汉堡做好了”,而通知你的方法也各不相同。如果是服务员跑过来找到你,这是回调模式,如果服务员发短信通知你,你就得不停地检查手机,这是轮询模式。总之,异步IO的复杂度远远高于同步IO
好比你去麦当劳点餐,你说“来个汉堡”,服务员告诉你,对不起,汉堡要现做,需要等5分钟,于是你站在收银台前面等了5分钟,拿到汉堡再去逛商场,这是同步IO。
你说“来个汉堡”,服务员告诉你,汉堡需要等5分钟,你可以先去逛商场,等做好了,我们再通知你,这样你可以立刻去干别的事情(逛商场),这是异步IO。
9.1 文件读写
#!/usr/bin/python
poem = '''\
1.dog
2.cat
3.rabbit
'''
f=file('/tmp/poem','w')
f.write(poem)
f.close()
#输出文件内容,方法一
#f=open('/tmp/poem','r')
#for line in f.readlines():
# print(line.strip())
#f.close()
#输出文件内容,方法二
f=file('/tmp/poem')
while True:
line = f.readline()
if len(line)==0:
break
print(line.strip())
f.close()
写文件
写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件:
>>> f = open('/Users/michael/test.txt', 'w')
>>> f.write('Hello, world!')
>>> f.close()
你可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:
with open('/Users/michael/test.txt', 'w') as f:
f.write('Hello, world!')
用close()的两个好处
1.关闭开启的文件数
2.确保内存中的数据写入硬盘
f.flush() 不用关闭文件就可以将内存中的内容写入到硬盘
小结
在Python中,文件读写是通过open()函数打开的文件对象完成的。使用with语句操作文件IO是个好习惯。
上一篇: python 虚环境部署
下一篇: Python 生成器 generator
47481
45784
36781
34306
28953
25587
24433
19604
19094
17624
5456°
6039°
5555°
5630°
6556°
5368°
5368°
5874°
5848°
7161°