广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中使用asyncio 封装文件读写
  • 866
分享到

Python中使用asyncio 封装文件读写

文件Pythonasyncio 2022-06-04 18:06:45 866人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

前言 和网络 io 一样,文件读写同样是一个费事的操作。 默认情况下,python 使用的是系统的阻塞读写。这意味着在 asyncio 中如果调用了 f = file('xx') f.read()

前言

网络 io 一样,文件读写同样是一个费事的操作。

默认情况下,python 使用的是系统的阻塞读写。这意味着在 asyncio 中如果调用了


f = file('xx')
f.read()

会阻塞事件循环。

本篇简述如何用 asyncio.Future 对象来封装文件的异步读写。

代码在 GitHub。目前仅支持 linux

阻塞和非阻塞

首先需要将文件的读写改为非阻塞的形式。在非阻塞情况下,每次调用 read 都会立即返回,如果返回值为空,则意味着文件操作还未完成,反之则是读取的文件内容。

阻塞和非阻塞的切换与操作系统有关,所以本篇暂时只写了 Linux 版本。如果有过 Unix 系统编程经验,会发现 Python 的操作是类似的。


flag = fcntl.fcntl(self.fd, fcntl.F_GETFL) 
if fcntl.fcntl(self.fd, fcntl.F_SETFL, flag | os.O_NONBLOCK) != 0: 
  raise OSError() 

Future 对象

Future 对象类似 javascript 中的 Promise 对象。它是一个占位符,其值会在将来被计算出来。我们可以使用

result = await future

在 future 得到值之后返回。而使用

future.set_result(xxx)

就可以设置 future 的值,也意味着 future 可以被返回了。await 操作符会自动调用 future.result() 来得到值。

loop.call_soon

通过 loop.call_soon 方法可以将一个函数插入到事件循环中。

至此,我们的异步文件读写思路也就出来了。通过 loop.call_soon 调用非阻塞读写文件的函数。若一次文件读写没有完成,则计算剩余所学读写的字节数,并再次插入事件循环直至读写完毕。

可以发现其就是把传统 Unix 编程里,非阻塞文件读写的 while 循环换成了 asyncio 的事件循环。

下面是这一过程的示意代码。


def read_step(self, future, n, total):
  res = self.fd.read(n)
  if res is None:
    self.loop.call_soon(self.read_step, future, n, total)
    return
  if not res: # EOF
    future.set_result(bytes(self.rbuffer))
    return
  self.rbuffer.extend(res)
  self.loop.call_soon(self.read_step, future, self.BLOCK_SIZE, total)

def read(self, n=-1):
  future = asyncio.Future(loop=self.loop)

  self.rbuffer.clear()
  self.loop.call_soon(self.read_step, future, min(self.BLOCK_SIZE, n), n)

  return future

--结束END--

本文标题: Python中使用asyncio 封装文件读写

本文链接: https://www.lsjlt.com/news/14250.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中使用asyncio 封装文件读写
    前言 和网络 IO 一样,文件读写同样是一个费事的操作。 默认情况下,Python 使用的是系统的阻塞读写。这意味着在 asyncio 中如果调用了 f = file('xx') f.read()...
    99+
    2022-06-04
    文件 Python asyncio
  • 使用Python读写csv文件
    简介:CSV (Comma Separated Values) 格式是电子表格和数据库中最常见的输入、输出文件格式。又称逗号分隔值(Comma-Separated Values,CS...
    99+
    2022-11-13
  • Python使用openpyxl读写excel文件
    需求:读入sample.xlsx中的信息,通过分析其中的身份证号信息,得到每个人的出生日期,性别,年龄,所在省份,星座,属相等等,将结果写入到另一个excel文件中。 首先,要使用openpyxl第三方库需要安装,安装方法如下: pip i...
    99+
    2023-09-11
    python
  • python使用技巧-文件读写
    前言: 在Python中,要对一个文件进行操作,只需要使用内置的open函数打开文件即可。open函数接受文件名和打开模式作为参数,返回一个文件对象。工程师通过文件对象来操作文件,完...
    99+
    2022-11-13
  • 使用Python读写多个sheet文件
    目录前言读取文件前言 怎么样使用Python提高自己的工作效率,今天就给大家分享这个吧。我们经常用pandas读入读写excel文件,经常会遇到一个excel文件里存在多个sheet...
    99+
    2022-11-11
  • 怎么使用Python读写CSV文件
    这篇文章主要介绍了怎么使用Python读写CSV文件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Python读写CSV文件文章都会有所收获,下面我们一起来看看吧。1. 读取CSV文件 csv.read...
    99+
    2023-07-02
  • Python中怎么读写文件
    Python中怎么读写文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。从文件读取和写入文件是任何编程语言的常见需求。任何文件在读写之前都需要打开。大多数编程语...
    99+
    2023-06-15
  • Python中怎么使用open函数读写文件
    本篇文章为大家展示了Python中怎么使用open函数读写文件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/fin...
    99+
    2023-06-17
  • python中使用scipy.io读写.mat文件的方法
    小编给大家分享一下python中使用scipy.io读写.mat文件的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python是什么意思Python是一种跨...
    99+
    2023-06-14
  • Python读取配置文件-ConfigParser的二次封装方法
    目录Python读取配置文件-ConfigParser二次封装直接上上代码读取配置文件&&简单封装1.configparser模块2.configparser读取文件...
    99+
    2022-11-13
  • Python如何读取配置文件ConfigParser的二次封装
    今天小编给大家分享一下Python如何读取配置文件ConfigParser的二次封装的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2023-06-29
  • 如何使用 Python 快速读写文件?
    当我们处理大量数据时,读写文件是非常常见的任务。Python 提供了一系列的内置函数和模块,可以帮助我们快速地读写文件。在本文中,我们将介绍如何使用 Python 快速读写文件。 读文件 Python 读取文件的最基本方法是使用内置函数 o...
    99+
    2023-07-30
    数组 文件 ide
  • python使用NumPy文件的读写操作
    一、使用NumPy读写文本文件 在数据分析中,经常需要从文件中读取数据或将数据写入文件,常用的存储文件的格式有文本文件、CSV格式文件、二进制格式文件和多维数据文件等。 1.将1维或...
    99+
    2022-11-12
  • python怎么使用pyshp读写shp文件
    今天小编给大家分享一下python怎么使用pyshp读写shp文件的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。安装pip&...
    99+
    2023-07-05
  • Python怎么使用PyYAML库读写yaml文件
    本篇内容介绍了“Python怎么使用PyYAML库读写yaml文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一,YAML 简介YAML,...
    99+
    2023-06-29
  • 怎么使用Python读写二进制文件
    这篇文章主要介绍“怎么使用Python读写二进制文件”,在日常操作中,相信很多人在怎么使用Python读写二进制文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Python读写二进制文件”的疑惑有所...
    99+
    2023-07-06
  • 使用SheetJS读写Excel文件
    文章目录 目的基础说明读取写入总结 目的 项目中有一个Excel转JSON的工具,之前这个工具一直使用 Python 的 openpyxl 库来编写的,然后使用 pyinstaller 打...
    99+
    2023-09-03
    excel python 开发语言 sheetjs 表格
  • Python中文件的读取和写入
    读取整个文件 这里假设在当前目录下有一个文件名为’pi_digits.txt’的文本文件,里面的数据如下: 3.1415926535 8979323846 2643383279 with open('pi_digits.txt'...
    99+
    2023-01-31
    文件 Python
  • 如何在python中读写文件流
    今天就跟大家聊聊有关如何在python中读写文件流,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、使用try进行异常发现,使用while检测文件末尾进行读取file_to_read...
    99+
    2023-06-15
  • Python中怎么读写配置文件
    Python中怎么读写配置文件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python 读写配置文件ConfigParser模块是python自带的读取配置文件的模块.通...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作