我开始涉足分布式代码,但很难根据现有的所有内容来确定哪种解决方案符合我的需求。基本上,我有一个python数据列表,我需要用一个函数来处理这些数据。这个函数有一些嵌套的for循环,但对于列表中的每一项来说不会花费太长时间(大约一分钟)。我的问题是清单太大了(3000多个项目)。我正在研究多处理,但我想我想尝试多服务器处理它(因为理想情况下,如果数据变得更大,我希望能够选择在作业期间添加更多服务器,使其运行更快)。
我基本上是在寻找可以通过分发这个数据列表的东西(不是超级需要的,但如果我也可以通过这个分发我的代码库,那就太好了)
所以我的问题是,我可以用什么包来实现这一点?我的数据库是hbase,所以我已经运行了hadoop(但从未使用过hadoop,只是将其用于数据库)。我看了看芹菜,也拧了一下,但我不知道哪一种能满足我的需求。
有什么建议吗?
我强烈推荐芹菜。您可以定义对列表中的单个项目进行操作的任务:
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]
只需添加更多的芹菜工人,就可以轻松扩展。
查看rabbitMQ。Python绑定可通过pika获得。从一个简单的workqueue开始,运行一些rpc调用。
用rabbitMQ这样的外部引擎在python中进行分布式计算实验可能看起来很麻烦(安装和配置rabbit有一个小的学习曲线),但稍后你可能会发现它更有用。
和celery可以与rabbitMQ携手合作,查看robert pogorzelski的教程和使用celery和rabbitMQ 的简单分布式任务