IO(Input/Output)输入和输出, IO编程中,Stream(流)是个很重要的概念,可以把流想象成个水管, 数据就是水管里的水。Input Stream就是数据从外面 (磁盘、网络)流进内存,Output Stream就是数据从内存流到外面去。
1、并行与并发
并发(concurrency):在一个时间段内有几个程序都处于已启动运行到运行完毕之间 ,且这几个程序都是在同一个处理机上运行,但任一时刻只能一个程序在处理机上运行。
并行(parallelism):当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互相不抢占CPU资源,可以同时进行,这种方式称为并行
2、同步与异步、阻塞与非阻塞
参考:http://www.cnblogs.com/albert1017/p/3914149.html
https://blog.51cto.com/yaocoder/1308899
最简单的话理解:同步是两个对象之间的关系,而阻塞是一个对象的状态。
网上关于这方面介绍的文章太多了,但自己看的大都是糊里糊涂的,上面提到的文章感觉介绍的很清晰
import sys
x = sys.stdin.readline()
print(x)
x = input('input a number:') #先把提示信息输出,然后捕获输入
print(x)
sys.stdout.write('io output-1')
sys.stdout.write('io output-2')
print('io output-1')#追加了一个换行符
print('io output-2')
输出结果:
1 --输入
1
input a number:2 --输入
2
io output-1io output-2io output-1
io output-2
3、SringIO&BytesIO 基于内存的IO模式
from io import StringIO
f = StringIO()
f.write('hello')
f.write(' ')
f.write('world')
print(f.getvalue()) #StringIO经常被用来作字符串的缓存
print('-------'*10)
f = StringIO('Hello!\nHi\nGoodbye!')
while True:
s = f.readline()
if s == '':
break
print(s.strip())
print('-------'*10)
s = StringIO('ABCDEF')
s.write('abc') #从开头写,将会覆盖ABC
s.seek(0)
print(s.read())
s.seek(2)
print(s.read())
输出结果:
hello world
----------------------------------------------------------------------
Hello!
Hi
Goodbye!
----------------------------------------------------------------------
abcDEF
cDEF
from io import BytesIO
f = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())
f = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')
x = f.read()
print(x.decode('utf-8'))
输出结果:
b'\xe4\xb8\xad\xe6\x96\x87'
中文
4、序列化和反序列化
序列化:变量从内存中变成可存储或者传输的过程称之序列化(pickling)
反序列化:把变量内容从序列化的对象重新读到内存里称之反序列化
优点:便于存储、便于传输
import pickle
def func():
print('hello tomorrow')
info = {'name':'lzy','age':29,'hobby':func}
f = open('a1.txt','wb')
f.write(pickle.dumps(info))
f = open('a1.txt','rb')
data = pickle.loads(f.read())
data['hobby']()
输出:
hello tomorrow
5、JSON
json.dumps(): 对数据进行编码
json.loads(): 对数据进行解码
import json
info = {'name':'lzy','age':22}
f = open('a1.txt','w',encoding='utf-8')
f.write(json.dumps(info))
f.close()
f = open('a1.txt','r',encoding='utf-8')
data = json.loads(f.readline())
print(data['age'])
f.close()
输出:
22
|