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同时兼容python2和python3的8个技巧分享
Jul 11 Python
跟老齐学Python之重回函数
Oct 10 Python
使用Python的Flask框架实现视频的流媒体传输
Mar 31 Python
PYTHON压平嵌套列表的简单实现
Jun 08 Python
python 显示数组全部元素的方法
Apr 19 Python
python 爬虫 批量获取代理ip的实例代码
May 22 Python
tensorflow: 查看 tensor详细数值方法
Jun 13 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
Jan 04 Python
详解pycharm连接不上mysql数据库的解决办法
Jan 10 Python
Python常用编译器原理及特点解析
Mar 23 Python
python实现猜数游戏(保存游戏记录)
Jun 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之第二天
2006/10/09 PHP
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
JS检测window.open打开的窗口是否关闭
2017/06/25 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
2017/07/12 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
[06:06]2018DOTA2亚洲邀请赛主赛事第四日战况回顾 全明星赛欢乐上演
2018/04/07 DOTA
django基础之数据库操作方法(详解)
2017/05/24 Python
Python 3.6 性能测试框架Locust安装及使用方法(详解)
2017/10/11 Python
python+opencv识别图片中的圆形
2020/03/25 Python
python中的colorlog库使用详解
2019/07/05 Python
python config文件的读写操作示例
2019/09/27 Python
Python: 传递列表副本方式
2019/12/19 Python
如何通过python实现全排列
2020/02/11 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
css3新单位vw、vh的使用教程
2018/03/23 HTML / CSS
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
后勤人员岗位职责
2013/12/17 职场文书
给同学的道歉信
2014/01/16 职场文书
中班开学寄语
2014/04/04 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
反四风对照检查材料
2014/09/22 职场文书
委托书格式范文
2015/01/28 职场文书
李白故里导游词
2015/02/12 职场文书
2015年前台文员工作总结
2015/05/18 职场文书
母亲去世追悼词
2015/06/23 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
Golang 遍历二叉树
2022/04/19 Golang