Python I/O与进程的详细讲解


Posted in Python onMarch 08, 2019

I/O

with语句

with context_expression [as target(s)]:
  with-body

context_expression返回值遵从上下文管理协议,包含__enter__()__exit__()方法,as语句的target(s)得到的是__enter__()返回值,执行with-body后会调用上下文管理器的__exit__()方法,使用with语句,可以减轻某些代码编写负担,比如文件读写。

读文件

try:
  f = open('/path/to/file', 'r', encoding='utf8', errors='ignore')
  print(f.read(1024))
finally:
  if f:
    f.close()
# 使用with语句
with open('/path/to/file', 'r') as f:
  print(f.read(1024))

open()方法打开文件模式,默认以utf8格式读取,添加后缀'b'(rb、wb)表示以二进制方式读取,mode有以下几种:

Python I/O与进程的详细讲解

StringIO和BytesIO

StringIO将string按照文件的方式读取和写入,BytesIO将bytes按照文件的的方式读取和写入。

OS

通过OS模块,与操作系统信息交互,如创建、移动、列出文件等等。

序列化

通过内置模块pickle,实现序列化与反序列化,使用json模块完成JSON数据的序列化和反序列化。

import pickle
d = dict(name = 'sha', age = 26)
# 将序列化内容写入文件
with open('dump', 'wb') as f:
  pickle.dump(d, f)
# 从文件中读取序列化内容
with open('dump', 'rb') as f:
  d = pickle.load(f)
print(d) # {'name': 'sha', 'age': 26}

进程与线程

进程

Python调用一次进程fork()会有两次返回,子进程永远返回0,父进程中返回子进程ID。os.fork()不支持windows,multiprocessing模块是跨平台版本的多进程模块。

import os
pid = os.fork() # pid后的代码会在两个进程中分别执行,通过pid值不同判断父子
if pid == 0:
  print('exec in child process')
else:
  print('exec in parent process')
# exec in parent process
# exec in child process

进程池

from multiprocessing import Pool
def say(x):
  print(x)
if __name__ == '__main__':
  p = Pool(4)
  for i in range(5):
    p.apply_async(say, args=(i,))
  p.close()
  p.join()

子进程

import subprocess
print('$ nslookup amsimple.com')
r = subprocess.call(['nslookup', 'amsimple.com'])
print('Exit code:', r)

进程间通信

进程间通信通过Queue与Pipes实现,父进程创建Queue传递给子进程。

线程

Python提供两个模块_thread与threading,前者是低级模块后者是高级模块,对_thread进行了封装。

启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行:

import threading
# 新线程执行的代码:
def say():
  print('%s say hello' % threading.current_thread().name)
t = threading.Thread(target=say, name = 'SayThread')
t.start()
t.join()

threading.current_thread()返回但前运行线程的实例,主线程名MainTreed,子线程名在创建时指定。

通过threading.Lock()获取锁,某些需要线程安全的操作,先通过acquire()获取锁,通过release()释放锁。

Python中的线程因为GIL锁,无法真正利用多核。

通过ThreadLocal实现线程级的全局变量,不同线程间相互不影响。

import threading
th_local = threading.local() # th_local会跟线程绑定,不同线程看到的是不同对象

分布式进程

managers模块依靠网络通信,可以把多进程分布到多台机器上。

正则

通过'r'前缀定义正则字符串,通过re模块做正则匹配等操作。

import re
s = r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$'
re.match(s, 'shasharoman@gmail.com')

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python中os.path用法分析
Jan 15 Python
python使用nntp读取新闻组内容的方法
May 08 Python
详解Python中的strftime()方法的使用
May 22 Python
详解Python装饰器由浅入深
Dec 09 Python
python实现一个简单的并查集的示例代码
Mar 19 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
Oct 29 Python
python 多线程对post请求服务器测试并发的方法
Jun 13 Python
python中安装django模块的方法
Mar 12 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
如何使用python自带IDLE的几种方法
Oct 10 Python
python中实现词云图的示例
Dec 19 Python
Python基于爬虫实现全网搜索并下载音乐
Feb 14 Python
举例讲解Python常用模块
Mar 08 #Python
python re库的正则表达式入门学习教程
Mar 08 #Python
opencv与numpy的图像基本操作
Mar 08 #Python
Python脚本修改阿里云的访问控制列表的方法
Mar 08 #Python
python实现整数的二进制循环移位
Mar 08 #Python
Python3实现的反转单链表算法示例
Mar 08 #Python
Python3实现的判断回文链表算法示例
Mar 08 #Python
You might like
php获取汉字拼音首字母的方法
2015/10/21 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
jquery自定义表格样式
2015/11/23 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
python中单下划线_的常见用法总结
2018/07/10 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
出纳岗位职责
2013/11/09 职场文书
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
项目管理计划书
2014/01/09 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
益达广告词
2014/03/14 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
2015年爱国卫生月活动总结
2015/03/26 职场文书
代理词怎么写
2015/05/25 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书
python自动计算图像数据集的RGB均值
2021/06/18 Python
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python