下载后立即处理文件

Process files as soon as they are downloaded

我有一个脚本可以下载很多 JSONs。下载后我正在处理 JSONs,并将它们发送到其他一些功能。目前,我只是在等到所有 JSON 都下载完毕,然后再处理每一个。有没有办法并行执行此操作?就像,一旦每个 JSON 下载完毕,就移动它以在其上执行一些任务。

我正在考虑使用 RabbitMQ,它会在完全下载后向消费者发送 JSON 的路径。我不知道如何确定 JSON 是否已下载并准备好使用它。

我看过其他答案,但没有找到任何明确的答案。我只想知道如何继续并发部分或如何将刚刚下载的 JSON 带到下一个进程。

使用某种消息队列可以帮助彻底解决这个问题,并解耦下载 JSON 和处理 JSON。

在此设置中:

[download] -> [MQ] -> [process] -> ??

每个 [] 代表一个单独的进程,而 -> 代表发送某种进程间数据。

您的下载脚本可以修改为将每个文件保存到云文件存储服务,并在下载完成后发布一条包含该文件位置的消息。

然后可能会有一个消费者进程从消息队列中读取并处理文件。

这将允许您在下载每个文件时对其进行处理。此外,它还允许您分别缩放下载和处理步骤。

虽然这种模式很常见,但操作复杂。您将需要管理 3 个独立的进程。

如果您想 运行 在一台机器上执行此操作,您可以通过两个单独的进程在本地应用相同的模式:

  • [下载] - 写入标准输出
  • [process_json] - 从标准输入读取并处理 json

然后你可以 link 他们使用 os 管道 download.py | process_json.py

download.py 会下载文件并写入文件路径。 process_json 将在单个文件路径上运行。