当我尝试用 open() 保存它时,异步响应生成空文件

问题描述 投票:0回答:0

Tl;博士

我不明白为什么分配给对象属性的异步响应(str)在尝试将其直接保存到文件时会产生空文件。如果我打印数据,一切都在那里。如果我用 Pandas 做同样的事情,一切正常。

问题

目前,Pandas 正在处理保存对文件的响应 (read_csv(StringIO(report.response) -> .to_csv) 我想用使用 open() 的简单写入文件方法替换 Pandas。

一旦我这样做了:

…
if report.valid: 
  with open(file_path, 'w') as f:
    f.write(report.response)
…

结果是空文件,如果我只是打印(report.response)。 Pandas 解决方案按预期工作。

回复:

…
if r.status == 200: 
  try:
    report.response = await r.text()
    report.valid = True
    self.queue.put(report)
…

异步部分一切正常,问题与保存到文件方法有关。

问题

我不明白为什么会这样,我已经确保流程不允许工作人员在完成之前尝试保存响应。响应已经在等待,所以它不应该是短暂的。好像。这可能是因为我对异步函数的工作方式以及如何在我尝试保存它之前强制完成等待的函数知之甚少。

环境描述

我创建了简单的异步应用程序,报告下载器。 App分为两大支柱,异步请求(aiohttp)和线程化(多个worker监控队列)保存到文件处理(Pandas)。传输由Queue解决。

应用程序流程

发送异步请求,一旦完成将request.response分配给Report对象,然后放入队列。如果队列不为空,让工作人员将 Report.response 保存到 csv 文件。

整个应用程序,包括代码,可在https://pypi.org/project/sfrout/

我会很感激任何帮助,谢谢。

asynchronous async-await python-asyncio
© www.soinside.com 2019 - 2024. All rights reserved.