我有一个下载大量JSON的脚本。我在下载后处理JSON,我将它们发送到其他一些功能。目前,我只是等待所有JSON下载然后处理它们。有没有办法并行做到这一点?就像,每下载一个JSON,移动它就可以执行一些任务。
我正在考虑使用RabbitMQ,它在完全下载后向消费者发送JSON的路径。我不知道如何确定是否已下载JSON并准备使用它。
我看过其他答案,但我找不到任何清楚的答案。我只是想知道如何继续使用并发部分或如何将刚下载的JSON带到下一个进程。
答案 0 :(得分:1)
使用某种消息队列可以帮助干净地解决这个问题,并解耦下载JSON并处理JSON。
在此设置中:
[download] -> [MQ] -> [process] -> ??
每个[]代表一个单独的过程 - >将代表发送某种进程间数据。
您的下载脚本可以修改为将每个文件保存到云文件存储服务,并在下载完成后发布包含该文件位置的消息。
然后可能有一个消费者进程从消息队列中读取并处理该文件。
这将允许您在下载时处理每个文件。此外,它还允许您单独扩展下载和处理步骤。
虽然这种模式很常见,但它带来了操作复杂性。您需要管理3个独立的流程。
如果您想在一台计算机上运行它,您可以通过两个单独的进程在本地应用相同的模式:
然后你可以使用os管道download.py | process_json.py
download.py
会下载文件并写入文件路径。和process_json将在单个文件路径上运行。