我正在尝试在 Amazon EC2 上运行一组 python 脚本。本帮助指南建议使用 Amazon SQS 来管理队列。从本指南中,我了解了如何启动 EC2 实例并将作业从我的计算机发送到队列,但我不明白如何设置 EC2 实例,以便它在从排队,然后将结果保存到 Amazon S3。如何获取、在 EC2 服务器上运行并将结果保存到 python 脚本的 S3?
2 回答
在上述指南中,您可以找到带有示例代码的github 存储库的链接。这是一个工作示例,回答您的问题。它有据可查,易于阅读。
即,仔细查看pdf/tasks.py源代码。简而言之,它使用ec2.run_instances
引导 bash 脚本启动 ec2 实例,该脚本:
- 更新实例
apt-get
- 在循环中用于
boto.connect_sqs
连接到 SQS 并获取任务 - 执行任务
- 用于
boto.connect_s3()
连接到 S3 并上传结果 - 脚本完成时关闭实例。
更新
此外,这是使用from和处理CheckResponseQueueTask
消息的周期性出列消息的一个很好的例子。查看源代码第 51-57 行的示例代码,该示例代码说明了上传到 S3 的结果。并说明了在任务数量超过实例数量的情况下使用队列处理器启动和引导新实例。第 214-244 行供参考。Celery.PeriodicTask
SQS
BOOTSTRAP_SCRIPT
CheckQueueLevelsTask
一种方法是在您的 EC2 实例上运行Celery,该实例能够使用 AWS SQS 作为开箱即用的任务代理。
可以在此处找到有关使用 Celery 和 AWS SQS 的信息:http: //docs.celeryproject.org/en/latest/getting-started/brokers/sqs.html
Celery 还支持并发和多个worker。这意味着您可以让多个运行 Celery 的 EC2 实例监听一个 AWS SQS 队列,并且这些任务将自动在您的实例之间分配。