下载后立即处理文件

时间:2017-05-30 12:12:48

标签: python json concurrency rabbitmq producer-consumer

我有一个下载大量JSON的脚本。我在下载后处理JSON,我将它们发送到其他一些功能。目前,我只是等待所有JSON下载然后处理它们。有没有办法并行做到这一点?就像,每下载一个JSON,移动它就可以执行一些任务。

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

我看过其他答案,但我找不到任何清楚的答案。我只是想知道如何继续使用并发部分或如何将刚下载的JSON带到下一个进程。

1 个答案:

答案 0 :(得分:1)

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

在此设置中:

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

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

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

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

这将允许您在下载时处理每个文件。此外,它还允许您单独扩展下载和处理步骤。

虽然这种模式很常见,但它带来了操作复杂性。您需要管理3个独立的流程。

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

  • [download] - 写入stdout
  • [process_json] - 从stdin读取并处理json

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

链接它们

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