序列化:把变量从内存中变成可存储或传输的过程称之为序列化
常用的是JSON(json的标准规定它的编码是utf-8);dumps返回的是一个str
import json
d=dict(name='bob',age=20,score=99)
json.dumps(d)
dump&dumps区别:(同理类似load&loads)
import pickle
f=open('test.txt','wb')
pickle.dumps(d)
>>>b'\x80\x03}q\x00(X\x03\x00\x00\x00ageq\x01K\x14X\x05\x00\x00\x00scoreq\x02KXX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00Bobq\x04u.'
pickle.dump(d,f)
f.close()
进程&线程:
调用os模块里面的fork() 但是注意windows系统没有fork()调用,在win系统下调用fork会出错。multiprocessing模块就是跨平台版本的多进程模块。
粗心!!!!if__name__=='__main__'
进程池POOL 如果要启动大量的子进程,可以用进程池的方式批量创建子进程
from multiprocessing import Pool
对Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close(),调用close()之后就不能继续添加新的Process了。
apply_async():非阻塞式方法,根据系统的调度进行进程的切换
子进程:import subprocess,如果子进程需要输入则通过communicate()方法输入
import subprocess
print('$ nslookup')
p = subprocess.Popen(['nslookup'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = p.communicate(b'set q=mx\npython.org\nexit\n')
print(output.decode('utf-8'))
print('Exit code:', p.returncode)
UnicodeDecodeError: 'utf-8' codec can't decode byte:一般的原因是因为decode()方法的第二个参数选择了默认的strict,将其改为ignore即可解决问题
进程间的通信 from multiprocessig import Queue,Process
Queue提供了get()和put()方法:个人理解,申请一个队列空间(有长度限制),利用put&get方法存放和获取队列信息大道通信的目的
q=Queue()
q.put(value)
q.get()