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基本数据类型详细介绍
Mar 11 Python
用python 制作图片转pdf工具
Jan 30 Python
Python3中使用PyMongo的方法详解
Jul 28 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
Nov 23 Python
Python编程之gui程序实现简单文件浏览器代码
Dec 08 Python
python放大图片和画方格实现算法
Mar 30 Python
Django admin禁用编辑链接和添加删除操作详解
Nov 15 Python
Python实现随机取一个矩阵数组的某几行
Nov 26 Python
python 实现矩阵填充0的例子
Nov 29 Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 Python
Python连接Mysql进行增删改查的示例代码
Aug 03 Python
Python私有属性私有方法应用实例解析
Sep 15 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删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
JQuery实现鼠标移动到图片上显示边框效果
2014/01/09 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
JS获取表格内指定单元格html内容的方法
2015/03/31 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
2015/12/17 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
2018/12/05 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
Python微信库:itchat的用法详解
2017/08/14 Python
Python中利用xpath解析HTML的方法
2018/05/14 Python
python命令行参数用法实例分析
2019/06/25 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
python计算无向图节点度的实例代码
2019/11/22 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
Python有参函数使用代码实例
2020/01/06 Python
python剪切视频与合并视频的实现
2020/03/03 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
Python绘图之二维图与三维图详解
2020/08/04 Python
师范生自荐信
2013/10/27 职场文书
小学毕业感言300字
2014/02/19 职场文书
某某同志考察材料
2014/05/28 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python