2010-11-18 102 views
1

我想知道是否有可能在多台机器上运行Perl中的线程。我正在集群环境中工作,需要并行运行一些进程,但无法使用MPI。 如果线程无法跨机器使用,是否还有其他替代方案,我应该看看,这将允许我做类似的事情,而不需要特殊的模块?Perl - 你可以在多台机器上运行线程吗?

+1

...为什么你会用这个perl?这听起来像是这个工作的错误工具。 – 2010-11-18 02:32:36

+0

你看过PVM吗? – tchrist 2010-11-18 13:29:19

回答

1

我在一周或两周前偶然发现了GNU parallel,而没有跨越单独的机器,它允许常规程序利用多个内核来缩短时间。可以帮助加快你正在做的任何事情。

4

Perl中的线程(和分支)与父线程/进程绑定在同一台计算机上,因此不需要跨计算机线程/分支。也就是说,您可以分别使用AnyEvent::MP/Coro::MP模块,异步事件循环框架的消息传递扩展和协作线程框架的Coro协作线程框架,从而使您可以创建一个节点网络,在一个或多个节点上执行不同的任务机器。详情请参阅AnyEvent::MP::Intro。对于不需要特殊模块的替代方案(我猜你的意思是说模块不在Perl发行版中),你可以想象为你的任务编写一个守护进程,并让它们通过TCP或UDP进行通信。除此之外的任何事情都可能需要至少一些未安装Perl的模块,但可从CPAN获得。

+0

我曾经写过一个'rfork($ hostname)'函数,但它有一大堆需求,当然包括目标机器是相同的硬件。但它确实正确,包括完美的'fork()'语义。不过,它在C中,不是Perl。 – tchrist 2010-11-18 13:28:45

+0

计划9和一些BSD已经有了一个rfork函数(不是'远程fork')。至于fork语义,不知道如何跨主机边界共享文件描述符和指针,是否为每个在两个主机之间代理的rfork创建了一个真正的分支? – MkV 2010-11-18 18:00:48

2

看看Gearman,一个多机器作业管理器队列。它确实需要特殊模块;我在这里回答“以防万一”你实际上可以使用额外的模块/基础设施。

有Perl绑定,Gearman::XS,我成功地在项目中使用它,我希望在请求者或工作进程可能驻留在多台机器上的环境中完成特定任务。也适用于一台机器和一个请求者上的多个工作进程(例如:一个特定的网络抓取工具,它要求任何工作人员解析页面的所有链接,但希望保持对结果的控制)。

它的工作方式是创建一个“worker”Perl程序,该程序具有多个子程序,可执行您希望以分布式方式执行的操作。您可以根据需要随时随地启动这些工作程序,并将其连接到一个(或多个)主减速员“经理”。 然后,您创建一个请求者(gearman客户端)Perl程序,它将执行请求。这也可以在任何机器上运行,并会联系主减速机经理要求完成一些工人的具体行动。任何工作人员都会这样做,并且您的请求者会将结果返回。

如果您的请求者不需要返回结果,但“只”需要执行任务,请改为查看TheSchwartz,该结构具有类似的体系结构,但不提供从工人获取消息返回到请求者,IIRC。

1

Check GRID :: Machine。

相关问题