我开始冒险进入分布式代码,并且无法根据所有内容确定哪种解决方案符合我的需求。基本上我有一个python的数据列表,我需要用一个函数处理。此函数具有一些嵌套for循环,但对于列表中的每个项目不会花费太长时间(大约一分钟)。我的问题是列表非常大(3000多项)。我正在考虑多处理,但我想我想尝试多服务器处理它(因为理想情况下,如果数据变大,我希望能够选择在作业期间添加更多服务器以使其更快地运行) 。
我基本上都在寻找可以分发这些数据列表的东西(而不是超级需要但是如果我也可以通过它分发我的代码库那将会很好)
所以我的问题是,我可以使用什么包来实现这一目标?我的数据库是hbase所以我已经运行了hadoop(虽然从未使用过hadoop,只是将它用于数据库)。我看着芹菜并扭曲了,但我很困惑哪个适合我的需要。
有什么建议吗?
答案 0 :(得分:4)
我强烈推荐celery。您可以定义对列表中的单个项目进行操作的任务:
from celery.task import task
@task
def process(i):
# do something with i
i += 1
# return a result
return i
您可以轻松地并行化这样的列表:
results = []
todo = [1,2,3,4,5]
for arg in todo:
res = process.apply_async(args=(arg))
results.append(res)
all_results = [res.get() for res in results]
只需添加更多芹菜工人即可轻松扩展。
答案 1 :(得分:2)
结帐rabbitMQ。 Python绑定可通过pika获得。从一个简单的work_queue开始,并运行一些rpc calls。
使用像RabbitMQ这样的外部引擎(在安装和配置兔子方面有一个小的学习曲线)在python中试验分布式计算可能看起来很麻烦,但是你可能会发现它在以后更有用。
......和芹菜可以与rabbitMQ,结帐robert pogorzelski's tutorial 和Simple distributed tasks with Celery and RabbitMQ
一起使用