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和C语言混合编程实例
Jun 04 Python
Python lambda和Python def区别分析
Nov 30 Python
Python三级菜单的实例
Sep 13 Python
python实现协同过滤推荐算法完整代码示例
Dec 15 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
python正则表达式匹配不包含某几个字符的字符串方法
Jul 23 Python
使用python telnetlib批量备份交换机配置的方法
Jul 25 Python
python向图片里添加文字
Nov 26 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 Python
Anaconda和ipython环境适配的实现
Apr 22 Python
django rest framework 自定义返回方式
Jul 12 Python
python 牛顿法实现逻辑回归(Logistic Regression)
Oct 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
索尼SONY ICF-SW7600GR电路分析与改良
2021/03/02 无线电
NOT NULL 和NULL
2007/01/15 PHP
用PHP实现多服务器共享SESSION数据的方法
2007/03/16 PHP
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
PHP 批量删除数据的方法分析
2009/10/30 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
php变量作用域的深入解析
2013/06/03 PHP
使用php计算排列组合的方法
2013/11/13 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
2018/12/03 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
Python 文件读写操作实例详解
2014/03/12 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
python实现媒体播放器功能
2018/02/11 Python
深入理解Python异常处理的哲学
2019/02/01 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
潘多拉珠宝俄罗斯官方网上商店:PANDORA俄罗斯
2020/09/22 全球购物
应用英语专业自荐信
2014/01/26 职场文书
班主任对学生的评语
2014/04/26 职场文书
婚前财产协议书范本
2014/10/19 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
Python中的套接字编程是什么?
2021/06/21 Python
python中__slots__节约内存的具体做法
2021/07/04 Python
在windows server 2012 r2中安装mysql的详细步骤
2022/07/23 Servers