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 相关文章推荐
精确查找PHP WEBSHELL木马的方法(1)
Apr 12 Python
在Python的Django框架中获取单个对象数据的简单方法
Jul 17 Python
pygame实现俄罗斯方块游戏
Jun 26 Python
对python中两种列表元素去重函数性能的比较方法
Jun 29 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
Aug 30 Python
django 将model转换为字典的方法示例
Oct 16 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
Dec 05 Python
Django异步任务之Celery的基本使用
Mar 23 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
Python输出指定字符串的方法
Feb 06 Python
python如何导出微信公众号文章方法详解
Aug 31 Python
Python实现自动装机功能案例分析
Oct 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
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
javascript单引号和双引号的区别和处理
2014/05/14 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
BootStrap 动态表单效果
2017/06/02 Javascript
详解jquery选择器的原理
2017/08/01 jQuery
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
Python fileinput模块使用实例
2015/05/28 Python
深入解析Python编程中JSON模块的使用
2015/10/15 Python
python 基础教程之Map使用方法
2017/01/17 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
Python遍历pandas数据方法总结
2018/02/09 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
详解如何减少python内存的消耗
2019/08/09 Python
python2与python3爬虫中get与post对比解析
2019/09/18 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
django的autoreload机制实现
2020/06/03 Python
Python读取yaml文件的详细教程
2020/07/21 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
Python3获取cookie常用三种方案
2020/10/05 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
公务员年度考核登记表个人总结
2015/02/12 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
css样式important规则的正确使用方式
2022/06/10 HTML / CSS