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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
Python pickle模块用法实例分析
May 27 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
Jul 12 Python
Python 闭包的使用方法
Sep 07 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
Oct 20 Python
Python2.X/Python3.X中urllib库区别讲解
Dec 19 Python
python机器学习之KNN分类算法
Aug 29 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
Apr 22 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 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不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
初识Laravel
2014/10/30 PHP
Yii框架form表单用法实例
2014/12/04 PHP
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
js实现格式化金额,字符,时间的方法
2015/02/26 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
javascript+HTML5自定义元素播放焦点图动画
2016/02/21 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
Django的数据模型访问多对多键值的方法
2015/07/21 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
Python中的asyncio代码详解
2019/06/10 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
pytorch 使用加载训练好的模型做inference
2020/02/20 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
企划专员岗位职责
2013/12/09 职场文书
2014年审计工作总结
2014/11/17 职场文书
考试作弊检讨书怎么写?
2014/12/21 职场文书
Django+Celery实现定时任务的示例
2021/06/23 Python