问题标签 [python-aiofiles]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asynchronous - 异步写入文件
我一直在尝试创建一个从客户端进程异步接收输入文件路径和输出路径的服务器进程。服务器会进行一些依赖于数据库的转换,但为了简单起见,我们假设它只是将所有内容都大写。这是服务器的一个玩具示例:
客户端:
我一次激活了服务器和几个客户端。服务器的日志:
所有客户都打印这个:
输出文件已创建,但仍为空。我相信他们没有被冲走。有什么办法可以解决吗?
python - websocket数据采集设计
我在这里有一个更开放的面向设计的问题。我有 Python 方面的背景,但没有网络或异步编程方面的背景。我正在编写一个应用程序来保存从 websockets 24/24、7/7 收集的数据,目的是最大限度地减少数据丢失。
我最初的想法是使用带有 asyncio、aiohttp 和 aiofiles 的 Python 3.6。
我不知道是每个 websocket 连接使用一个协程还是每个 websocket 连接一个线程。与良好的连接错误处理相比,性能可能不是问题。
python - CPU/网络监控
我有关于 CPU/网络监控的基本 Python 和 Unix 问题。我正在运行一个应用程序监听一些 Websocket 并将传入的数据保存到文件(Python3.6、asyncio、aiohttp 和 aiofiles)。大约 300 KB/秒的接收速度。
- 使用“top”,我得到 100% 的 CPU 使用率。这是否意味着我有能力并因此有丢失数据包的风险,或者这只是与异步编程有关的人为因素?分析表明它大部分时间都在读取 Websocket 数据。我真的不明白 I/O 应用程序如何消耗如此多的 CPU。
- 如果我每个 CPU 或网络容量都可以使用任何工具来发送警告 - 这样我就可以在冒着丢失数据的风险之前采取行动?最好在 Python 中,但如果不是,我总是可以从 Python 运行系统命令。
python - python中的异步下载不起作用
我正在尝试在 python 中实现快速下载器。使用 aiofiles 时出现错误
错误:
完整代码
python - 在 Discord.py Bot 中写入文件的问题
我正在尝试将用户在民意调查中的答案写入文件,特别是得到“是”答案的问题。我的代码看起来像这样。
不幸的是,在运行机器人并自己解决问题后,我找不到任何文件,我找不到任何文件。我搜索了我的 main.py 文件所在的同一个文件夹。机器人按预期提出问题,添加两个反应,在我的测试中休眠 40 秒,然后移动到下一个,我确定 for 循环或 if 语句或两者都失败了,因为我没有将任何内容打印到我的控制台。如果您有任何更好的方法来解决这个问题,我很想知道它。先感谢您。
python-asyncio - 使用 asyncio 和 aiofiles 异步生成平面文件不能正常工作
我正在学习python中的异步编程,并且知道asyncio是我们应该使用的最新包,所以我尝试编写一个简单的脚本来异步生成一些文件(我使用线程来并行生成文件,并且效果很好)。由于在生成文件时写入 IO 花费大部分时间,所以这是我的脚本。
版本
异步方式
在我的示例中,tmp.txt 是一个大小为 240K 的文件,我使用它作为基础并创建比它大 1000 倍的目标文件。为了比较异步方式和同步方式的时间成本,这里是同步方式,将create_file body替换为下面的(只需使用常规方法而不是aiofiles)
有结果
异步方法确实比同步方法运行得更快(16.6s vs 21.8s),但我的期望是异步应该运行得更快......当我们查看日志时,我们可以看到读取 tmp 文件实际上非常接近。
但是写开始没有关闭
我期望的是每个任务的“写开始”应该非常接近“读结束”,因为生产内容应该只需要很少的时间,但为什么每个任务的“写开始”如此不同?
谢谢,
洪
python-3.x - 如何在同步测试类中使用 pyfakefs 测试 aiofile
考虑模块中的功能。
还有一个测试班
在此示例中,测试函数应设置 pyfakefs 以提供假文件。不幸的是,aiofiles 无权访问该文件,打印输出是系统上的真实文件。
有谁知道我如何修补 aiofiles 事件循环以使用 pyfakefs 作为假文件系统?在测试中,我使用名为pytest-aiofiles
(听起来像我需要的,对吗?)的库找到了以下代码片段,但它们显示的示例:
如果我将mark.asyncio
装饰器添加到test
类方法中,则导入的函数无法访问方法中生成的假文件setUp
。
我假设我遗漏了一些简单的东西,所以这一切都可以分解为一个简单的问题:我到底该如何测试这个?
谢谢!
python - 用于计算文件哈希的异步编程
我正在尝试计算文件的哈希值以检查是否进行了任何更改。我有 Gui 和其他一些观察者在事件循环中运行。所以,我决定异步计算文件的哈希值 [md5/Sha1 哪个更快]。
同步代码:
同步代码的输出: 2.4000535011291504
异步代码:
异步代码的输出:27.957366943359375
我做对了吗?或者,是否需要进行任何更改以提高代码的性能?
提前致谢。
python - 为什么使用 Python 异步从文件读取和调用 API 比同步慢?
我有一个大文件,每行都有一条 JSON 记录。我正在编写一个脚本来通过 API 将这些记录的一个子集上传到 CouchDB,并尝试使用不同的方法来查看最快的方法。这是我发现工作速度最快到最慢的(在我的本地主机上的 CouchDB 实例上):
将每个需要的记录读入内存。在所有记录都在内存中之后,为每条记录生成一个上传协程,并一次收集/运行所有协程
同步读取文件,遇到需要的记录,同步上传
用于
aiofiles
读取文件,当遇到需要的记录时,异步更新
方法 #1 比其他两个快得多(大约快两倍)。我很困惑为什么方法 #2 比 #3 快,尤其是与这里的示例相比,异步运行所需的时间是同步运行的一半(未提供同步代码,必须自己重写)。是否是从文件 i/o 到 HTTP i/o 的上下文切换,尤其是文件读取比 API 上传更频繁的情况下?
为了进一步说明,这里有一些代表每种方法的 Python 伪代码:
方法 1 - 同步文件 IO、异步 HTTP IO
方法 2 - 同步文件 IO,同步 HTTP IO
方法 3 - 异步文件 IO、异步 HTTP IO
我正在开发的文件大约是 1.3 GB,总共有 100000 条记录,其中我上传了 691 条。每次上传都以 GET 请求开始,以查看记录是否已存在于 CouchDB 中。如果是,则执行 PUT 以使用任何新信息更新 CouchDB 记录;如果没有,则将记录发布到数据库。因此,每次上传都包含两个 API 请求。出于开发目的,我只创建记录,所以我运行 GET 和 POST 请求,总共 1382 个 API 调用。
方法#1 大约需要17 秒,方法#2 大约需要33 秒,方法#3 大约需要42 秒。
python - 如何在 Python 中使用 asyncio 将大量 HTML 转换为 JSON
这是我第一次尝试在 python 中使用 asyncio。目标是将 40000+ htmls 转换为 jsons。使用同步 for 循环大约需要 3.5 分钟。我有兴趣看到使用 asyncio 的性能提升。我正在使用以下代码:
运行几秒钟后,我收到以下错误。
这里发生了什么?提前致谢