python中o_Python I/O与进程的详细讲解
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有以下几种:
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中o_Python I/O与进程的详细讲解相关推荐
- Python中sympy库的使用方法(详细)
Python中sympy库的使用方法(详细) python拥有强大的数学计算能力,Matlab确实有很强的计算能力,但是python在这方面更加灵活,运行速度更快,所以python在这方面拥有较大优势 ...
- php给textarea赋值,html中textarea赋值与取值问题详细讲解
html中textarea赋值与取值问题详细讲解2017-10-17 21:49 许多小伙伴在编程的时候,容易搞错一个问题,就是对textarea赋值. 因为第一感觉就是textarea和input一 ...
- 《电子DIY》之《单片机实践项目》之(51单片机)proteus中带编码信号的电机的详细讲解及电路图绘制(motor encoder)
此课程主要讲解如何使用51单片机进行实战应用,分为多次课,每次课都会分别围绕一个课程设计或毕业设计(实践项目)展开.手把手叫你学51单片机."Proteus仿真","电子 ...
- python中GIL和线程与进程
线程与全局解释器锁(GIL) 一.线程概论 1.何为线程 每个进程有一个地址空间,而且默认就有一个控制线程.如果把一个进程比喻为一个车间的工作过程那么线程就是车间里的一个一个流水线. 进程只是用来把资 ...
- python中def _init_是什么意思_详细解读Python中的__init__()方法
__init__()方法意义重大的原因有两个.第一个原因是在对象生命周期中初始化是最重要的一步:每个对象必须正确初始化后才能正常工作.第二个原因是__init__()参数值可以有多种形式. 因为有很多 ...
- python中正则表达式的简单应用_Python正则表达式详细应用
原文地址:http://www.jb51.net/article/65286.htm 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合, ...
- 【Python】Python中pip命令的使用(超级详细,命令大全)
系列文章目录 Python 中 pip 常见命令 文章目录 系列文章目录 前言 一.python pip 命令 二.命令总结 1.显示列表pip list 2.安装命令pip install 3.安装 ...
- python中复数采用什么方法提取实部_讲解Python3中NumPy数组寻找特定元素下标的两种方法 python3中怎样实现对一个复数取实部...
python numpy 数组提取某一列大于某一直的数据 import numpy as npa=np.arange(9).reshape(3,3)12 a Out[31]: array([[0, 1 ...
- 【强烈推荐】Python中JSON的基本使用(超详细)
Python中JSON的基本使用 1. JSON简介 2. JSON语法规则 3. JSON数据类型 4. JSON对象 5. JSON数组 6. JSON中常用的方法 6.1 json.dumps( ...
最新文章
- javascript eval和JSON之间的联系
- 【每日一算法】有效的括号
- Windows环境下node.js的安装和配置
- nginx 部署静态网页
- Chrome OS 设备或将允许用户自行选择 Linux 发行版
- .NET Core 2.0体验
- Code Project - Your First C# Web Service
- python将图片原比例缩小_Python实现图片长宽比例缩放和填充
- Tensorflow:常见错误
- 如何在百度文库复制文字
- html五子棋游戏(附源码)
- 【无标题】段码液晶驱动芯片VK1621S-1资料介绍
- Wechaty|微信小助手(非web|机器人)
- 基于ChatGPT制作的一款英语口语练习应用SpokenAi
- 四十多岁的男人还适合重新创业吗?
- 二级c语言培训资料,全国计算机二级考试C语言,培训资料.doc
- 神奇的主力成本线!居然能将主力成本运筹帷幄?!
- 用户、配额管理 、 云主机类型管理 、 镜像管理 、 网络管理 、 安全和实例管理 、 计算节点扩容案例
- sql日志的详细打印的配置
- Urule Pro 普通决策表的应用,Excel导入决策表
热门文章
- 道闸系统服务器价格,小区道闸系统价格服务客户
- python 钉钉机器人发送图片_Python结合钉钉实时自动监控股票行情,上班炒股再也不怕老板发现...
- oracle00109,ORA-01034: 、ORA-01078: 和 LRM-00109: 的解决方法,ora-01034ora-01078
- matlab画曲面二次,如何用matlab绘制二次B样条三维曲面(已知控制点和节点矢量)?...
- 信息系统管理19年真题选择题
- java中split以“.“ 、“\“、“|”分隔
- html网页加密最终版,【原】记一次加密网页html的研究
- mysql 8小时问题_Mysql经典的“8小时问题”
- 网络知识:交换机中的半双工与全双工知识笔记
- 深受程序员鄙视的外行语录,你都听过吗?