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编程实现数学运算求一元二次方程的实根算法示例
Apr 02 Python
Python基于jieba库进行简单分词及词云功能实现方法
Jun 16 Python
python 把列表转化为字符串的方法
Oct 23 Python
python isinstance函数用法详解
Feb 13 Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 Python
pip安装tensorflow的坑的解决
Apr 19 Python
python的Jenkins接口调用方式
May 12 Python
python爬虫调度器用法及实例代码
Nov 30 Python
python字典按照value排序方法
Dec 28 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 Python
Python使用MapReduce进行简单的销售统计
Apr 22 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语法(4)
2006/10/09 PHP
最令PHP初学者们头痛的十四个问题
2007/01/15 PHP
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
selenium 反爬虫之跳过淘宝滑块验证功能的实现代码
2020/08/27 Javascript
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
谈谈python中GUI的选择
2018/03/01 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
Django 连接sql server数据库的方法
2018/06/30 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
关于Python解包知识点总结
2020/05/05 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
结构工程研究生求职信
2013/10/13 职场文书
汽车专业人才自我鉴定范文
2013/12/29 职场文书
大学生应聘求职信
2014/05/26 职场文书
中层干部培训方案
2014/06/16 职场文书
中文专业自荐书
2014/06/29 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书