我目前正在研究用C编写的一些模拟代码,它在不同的远程机器上运行。当C部分完成时,我希望通过使用python模拟api和某种作业队列系统扩展它来简化我的工作,该系统应该执行以下操作:
1.specifiy一组参数,在这些参数上应该进行模拟并将它们放入主机的队列中
2.工人在远程机器上执行模拟
3.将结果返回给主机
我查看了完成此任务的不同框架,我的第一选择归结为IPython.parallel。我查看了文档,从我测试的内容看起来很容易使用。我的方法是使用负载平衡视图,如
中所述http://ipython.org/ipython-doc/dev/parallel/parallel_task.html#creating-a-loadbalancedview-instance
但我没看到的是:
由于我运行相对较长的模拟(1-2周),如果系统的某些部分崩溃,我不希望我的模拟失败。那么有可能在IPython.parallel中处理这个问题吗?
我的第二种方法是使用pyzmq并从头开始实现jobystem。 在这种情况下,这种情况下最好的zmq模式是什么?
最后但并非最不重要的是,这种情况可能有更好的框架吗?
答案 0 :(得分:0)
幕后背后的内容是关于如何在(并行化的)数字运算管道旁安排工作包流程的更复杂的观点。
成为许多 CPU核心周的工作包,
或
作为工作的lumpsum量高于成千上万的CPU核心时间,原则是相似的并遵循常识。
基于分布式大规模并行调度程序的自愈计算引擎的home-brew架构
重复使用可用的基于网格的计算资源
基于自己的经验来解决在庞大的参数SetVectorSPACE(无法将其解组为任何平凡的GPU并行化方案)中重复运行数值密集优化问题的需求,第二种方法的选择已被验证为更多在另一次审判中重新发明轮子,而不是企图燃烧数十人*年。
在学术环境中,人们可以更容易地获得对资源池的可接受访问权以处理工作包,而商业实体可以根据其可接受的预算阈值获得相同的资源。
答案 1 :(得分:0)
我的直觉是建议为此推出自己的解决方案,因为就像你说的那样,你依赖于IPython而不会崩溃。
我会在每个监听run命令的节点上运行一个简单的python服务。当它收到一个它启动你的C程序。但是,我建议你确保C程序是true Unix daemon,所以当它运行时它完全脱离python。这样,如果您的节点python实例崩溃,如果C程序成功执行,您仍然可以获取数据。让C程序将输出数据写入文件或数据库,并在任务完成时将“已完成”写入“状态”或类似的东西。 python服务应该监视该文件,并在完成时指示它应该检索数据并将其发送回服务器。
这种设计的核心思想是尽可能减少可能的故障点。只要C程序没有崩溃,您仍然可以以这种或那种方式获取数据。至于处理系统崩溃,网络断开等等,这取决于你。