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')

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

千层套路 - Vue 3.0 初始化源码探秘

关注若川视野, 回复"pdf" 领取资料,回复"1",可加群长期交流学习刘崇桢,微医云服务团队前端工程师,左手抱娃、右手持家的非典型码农。9 月初 Vue.js 3.0 正式发布,代号 "One Piece"。大秘…

css网页布局兼容性有哪些要点与诀窍

IE vs FFCSS 兼容要点:DOCTYPE 影响 CSS 处理FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中FF: 设置 padding 后, div 会增加 height 和…

js 下拉底部加载|滑轮滚动到页面底部ajax加载数据的实例

转载链接:http://www.cnblogs.com/thinksley/archive/2013/05/12/3074237.html 滚动下拉到页面底部加载数据是很多瀑布流网站的做法,那来看看配合jsonp是如何实现的吧,小菜总结记录之用,高手勿喷。 当然本例子采用的是jquery库&…

python并行for循环_Python并行执行for循环

简介在介绍如何最简单地利用 python 实现并行前,我们先来看一个简单的代码。words [apple, bananan, cake, dumpling]for word in words:print word上面的例子中,我们用一个 for 循环打印出 words 列表中的每个单词。问题来了,这里我们打印完…

C语言之指针与数组总结

和指针相关的问题口诀1: 1. 地址变量得地址,得谁地址指向谁 和指针相关的问题要画图: 内容变量画房子,指针画箭头 ---->口 ---------------------------------------------------- 和指针相关的两个特殊运算符: 一、"&…

2020年大前端技术趋势解读

导Lead语如今的前端早已不再拘泥于满足页面展示,而是开始延展到通过全栈来闭环产品。这表明前端已经有能力透过业务深入产业,继而影响商业结果。这种表象的改变背后是本质的转变,从更为宏观的角度来说,前端正在通过持续的技术革新…

HTML默认样式表CSS属性

转载链接:http://www.xiao-a.com/index.php/archives/440.html 开始的时候 *{margin:0;padding:0;},当需要使用边距的时候,就需要还原HTML默认CSS值了。以前一直在找这份 文档,今天偶然在w3上看到了。除了inline和block的定义&…

第六集 MSF构思阶段项目团队的组建

第六集 MSF构思阶段项目团队的组建__Note转载于:https://www.cnblogs.com/zencorn/archive/2009/10/18/1585495.html

lc滤波器是利用电感的感抗_你对LC谐振电路你都了解吗

根据在电路中电感器L和电容C的连接方式不同,可以有两种LC谐振电路,LC并联谐振电路和LC串联谐振电路。LC并联、串联谐振电路在应用中的变化较多,是电路中分析的一个难点,只有掌握LC并联、串联电路的阻抗特性等基本概念,…

给小程序再减重 30% 的秘密​(京喜小程序首页瘦身实践)

前言—在 web 开发场景,减少代码体积虽然是性能优化的一个方向,还没到锱铢必较的程度。但是在小程序场景,由于代码包上传阶段限制了主包 2M 和总包 16M(近期微信官方正在内测将总包上限调整至 20M )的尺寸,…

rfc mail content-type

转载链接:http://www.w3.org/Protocols/rfc1341/0_TableOfContents.html RFC 邮件正文类型列表: Note: this is a hypertext versionof RFC1341 which has been obsoletedby RFC1521, of which no hypertextversion currently exists. Text …

Coolite Toolkit入门指南

Coolite Toolkit 简介 Coolite Toolkit 是一个支持ASP.NET AJAX的Web控件Coolite Toolkit是基于跨浏览器的ExtJS 库开发而来的,并且简化了开发步骤,包含有丰富的Ajax运用Coolite Toolkit和ExtJS 都是开源的可能通过SVN直接获取Coolite 的代码简单的说,就…

本周ASP.NET英文技术文章推荐[10/21 – 10/27]

这一篇是《本周ASP.NET英文技术文章推荐》系列的第一篇,在这个系列中,我将介绍5-10篇比较有价值的、本周发布的、与ASP.NET相关的英文技术文章,帮助各位朋友从良莠不齐的大量文章中挑出一些我认为非常有价值阅读的,在进行一段简要…

vim 离线安装_VIM学习笔记 插件列表(Plugin)

由于zhihu的垃圾编辑器不支持表格,请查看以下完整格式:http://yyq123.github.io/learn-vim/learn-vim-plugin.html说明:本列表完全基于作者的主观体验,既不客观也不完整;建议使用vim-plug或Vundle等插件管理器&#xf…

3 年前端面经和他在创业公司的成长历程

在掘金上当了几年的伸手党,最近也准备输出一些自己的东西。关于我首先介绍一下我自己,17 年毕业于一所 211 学校,但是由于大学四年驰骋在召唤师峡谷,毕业时也没有找到一份大厂的工作,随便找了一家创业公司签了三方就去…

Spring.NET学习笔记9——打造简易的依赖注入框架(练习篇) Level 100

我们在第三篇中学习里一个简易的IoC框架。今天我们接着上次的程序,实现带参数构造函数对象的实例和属性的注入 。  我们知道可以通过反射获取类的构造函数及参数(GetConstructors方法);可以获取属性和属性的类型(GetProperties方法)。通过Activator的C…

PHP 利用Mail_MimeDecode类提取邮件正文

参考链接:http://blog.csdn.net/dmtnewtons_blog/article/details/18765289 rfc mail content-type: 参考链接:http://blog.csdn.net/dmtnewtons_blog/article/details/19327105 根据主流的邮件解析类Mail_MimeDecode,提取邮件正…

android 单元测试

首先AndroidManifest.xml View Code <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"com.travelsky.test" android:versionCode"1"androi…

申万一级行业日指数_基金收评 | 指数震荡走弱,军工股成两市主线!后期行情如何?...

收评君复盘日记(2020年9月21日)三大指数集体收跌&#xff0c;北向资金全天大幅净流出近65亿元&#xff0c;军工板块表现强势。盘面回顾9月21日&#xff0c;两市全天高开低走&#xff0c;早盘指数弱势震荡&#xff0c;三大指数盘中一度翻红&#xff0c;但随后震荡走弱&#xff0…