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 23 Python
Python多线程编程(六):可重入锁RLock
Apr 05 Python
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
python实现获取Ip归属地等信息
Aug 27 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
Python实现动态图解析、合成与倒放
Jan 18 Python
python更改已存在excel文件的方法
May 03 Python
python3爬虫之设计签名小程序
Jun 19 Python
python 常用的基础函数
Jul 10 Python
selenium+python实现自动化登录的方法
Sep 04 Python
详解python算法之冒泡排序
Mar 05 Python
python中tkinter复选框使用操作
Nov 11 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采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
javascript继承之为什么要继承
2012/11/10 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
jQuery操作cookie方法实例教程
2014/11/25 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
laypage.js分页插件使用方法详解
2019/07/27 Javascript
jQuery实现点击滚动到指定元素上的方法分析
2020/03/19 jQuery
JS实现点星星消除小游戏
2020/03/24 Javascript
初步理解Python进程的信号通讯
2015/04/09 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
大专应届生个人简历的自我评价
2013/10/15 职场文书
市场营销专业推荐信
2013/11/03 职场文书
大专会计自我鉴定
2014/02/06 职场文书
美术教学感言
2014/02/22 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
生产助理岗位职责
2014/06/18 职场文书
优秀团员事迹材料2000字
2014/08/20 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
售后服务质量承诺书
2015/04/29 职场文书
鸡毛信观后感
2015/06/11 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
最新最全的手机号验证正则表达式
2022/02/24 Javascript
pandas进行数据输入和输出的方法详解
2022/03/23 Python