python进程管理教程(Python I/O与进程的详细讲解)
python进程管理教程
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' ) |
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://amsimple.com/blog/article/43.html
- python3.7.2 详细安装教程(python3.5安装python3-tk详解)
- python本地ocr库(详解Python安装tesserocr遇到的各种问题及解决办法)
- python3常用内建函数(Python3中函数参数传递方式实例详解)
- python列表中的数组(Python3.4学习笔记之列表、数组操作示例)
- python迭代列表解析(Python可迭代对象操作示例)
- python发送微信消息脚本(python实现给微信指定好友定时发送消息)
- python人脸识别实战视频(Python学习笔记之图片人脸检测识别实例教程)
- pythondict排序原理(Python标准库使用OrderedDict类的实例讲解)
- python批量创建字典(Python编写合并字典并实现敏感目录的小脚本)
- markdown和python的关系(解决python Markdown模块乱码的问题)
- python变量指向讲解(详解python中init方法和随机数方法)
- python3和python区别(Python2与Python3的区别实例总结)
- python开启线程池(对python:threading.Thread类的使用方法详解)
- python mysql配置(详解python校验SQL脚本命名规则)
- pythonqt入门教程(使用python实现mqtt的发布和订阅)
- python单例编程(浅谈Python反射 & 单例模式)
- 谁说女子不如男 范冰冰演的武则天只是其一,另外两位你认识吗(谁说女子不如男)
- 杯酒人生---瓦伦丁酒杯和奥丁格啤酒(杯酒人生---瓦伦丁酒杯和奥丁格啤酒)
- 中秋节买啤酒,预算超过7元试试这8种啤酒,麦香浓郁都是真啤酒(预算超过7元试试这8种啤酒)
- CellPress旗下的6 期刊,国人友刊来了解一下吧(CellPress旗下的6期刊国人友刊来了解一下吧)
- ()
- SCI检索 SSCI检索 EI检索 ISTP检索 CSCD检索简介(SCI检索SSCI检索EI检索)
热门推荐
- vue实现商品详情讲解(京东 Vue3 组件库支持小程序开发的详细流程)
- sql server2019无法连接到服务器(SQL Server常见问题及解决方法分享)
- sqlserver语句显示表字段(SQL Server查找表名或列名中包含空格的表和列实例代码)
- 最简单python的100个代码(20条非常实用的Python代码实例)
- 怎样在python中散点图(python使用Plotly绘图工具绘制散点图、线形图)
- 怎么查看mysql计划执行情况(详解 MySQL 执行计划)
- python 导入指定文件夹的模块(Python实现的在特定目录下导入模块功能分析)
- appui代码(AmazeUI 图标的示例代码)
- php命名对照表(PHP命名空间用法实例分析)
- django url配置失效(解决Django生产环境无法加载静态文件问题的解决)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9