我想知道是否可以跨多台计算机在Perl中运行线程。我在集群环境中工作,需要并行运行我的一些进程,但无法使用MPI。 如果不能跨机器使用线程,那么我应该看看是否有其他替代方法可以让我做类似的事情并且不需要特殊的模块?
答案 0 :(得分:4)
Perl中的线程(和分支)与父线程/进程绑定在同一台计算机上,因此没有跨计算机线程/分叉。也就是说,您可以分别使用AnyEvent::MP / Coro::MP模块,消息传递扩展到AnyEvent异步事件循环框架和Coro协同例程,协作线程框架,它允许您创建在一台或多台机器上执行不同任务的节点网络。有关详细信息,请参阅AnyEvent::MP::Intro。
对于不需要特殊模块的替代方案(我猜,你的意思是,你的意思是不在perl发行版中的模块),你可以想象为你的任务编写一个守护进程并让它们通过TCP或UDP进行通信。除此之外的任何事情可能至少需要一些未安装Perl的模块,但可以从CPAN获得。
答案 1 :(得分:2)
查看Gearman,一个多机作业管理器队列。 需要特殊模块;我在这里回答“以防万一”你实际上可以使用额外的模块/基础设施。
有Perl绑定,Gearman::XS,我成功地在项目中使用,我希望在请求者或工作进程可能驻留在多台机器上的环境中完成特定任务。也适用于一台机器上的多个工作进程和一个请求者(例如:某个Web scraper,它请求来自任何工作人员解析的页面的所有链接,但希望保持对结果的控制)。
它的工作方式是你创建一个“worker”Perl程序,它有许多子程序,它们执行你想以分布式方式执行的动作。您可以根据需要在任何一台机器上启动这些工作程序,并将它们连接到一个(或多个)主齿轮“管理器”。 然后创建一个请求者(gearman客户端)Perl程序,它将执行请求。这也可以在任何机器上运行,并将联系主齿轮管理员以请求完成一些工人的特定操作。任何工作人员都会这样做,而你的请求者会得到结果。
如果您的请求者不需要返回结果但“只是”需要执行任务,请改为查看具有类似架构的TheSchwartz,但不提供从工作人员获取消息的工具回到请求者,IIRC。
答案 2 :(得分:1)
我在一两个星期前偶然发现GNU parallel
,而不是在不同的机器上,它通过允许常规程序利用多个核心来帮助减少时间。可以帮助加快你正在做的事情。
答案 3 :(得分:1)
检查GRID :: Machine。