我需要编写一个计算密集型模拟程序。我尝试编写该程序的多线程版本,但它花费了太多时间。现在我计划扩展到多个节点(可能通过 Amazon EC2 节点)。
我已经熟悉 Python。如果我关心速度,Python配备一些并行模块是一个可行的选择,还是我最好选择其他一些框架/语言,比如 Erlang?
你甚至可以用 Erlang 写一个模拟程序吗?
该项目更多是关于划分计算而不是划分数据集,所以我没有考虑基于map reduce的框架
我需要编写一个计算密集型模拟程序。我尝试编写该程序的多线程版本,但它花费了太多时间。现在我计划扩展到多个节点(可能通过 Amazon EC2 节点)。
我已经熟悉 Python。如果我关心速度,Python配备一些并行模块是一个可行的选择,还是我最好选择其他一些框架/语言,比如 Erlang?
你甚至可以用 Erlang 写一个模拟程序吗?
该项目更多是关于划分计算而不是划分数据集,所以我没有考虑基于map reduce的框架
dispy是一个使用 Python 进行分布式计算的框架。它使用 asyncoro,这是一个使用协程进行异步并发编程的框架,具有 erlang(广义而言)的一些特性。免责声明:我是这两个框架的作者。
如果您已经熟悉 python,我建议您在 python 中进行模拟(并在 C 中加速关键部分)并使用 Erlang 来管理它。在 Erlang 中编写模拟将远远超出您的舒适区(即使我个人也会这样做)。您可能可以将部分 Erlang 项目重用为Disco 项目或Riak 核心。从一些次优的 POC 开始您的项目并在迭代中对其进行调整。这意味着从 python 开始,将其嵌入到 Erlang(可能是 Disco),然后移动位,直到您对性能和功能不满意为止。您最终可以得到任何东西,包括纯 Erlang 解决方案或使用 NIF 在 BEAM 中修改 Python 或任何其他满足您需求的东西。
你的问题是微不足道的并行化吗?然后你可能想看看Elastic Map Reduce而不是 EC2。