大佬教程收集整理的这篇文章主要介绍了如何使我的Perl脚本为子进程使用多个内核?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
切到追逐:我有一个Perl脚本,使用不同的输入参数重复调用XFOIL来生成我需要的数据.我需要XFOIL运行5600次,现在平均每次运行大约需要100秒.做数学,这意味着需要大约6.5天才能完成.
现在,我有一台四核机器,但作为程序员的经验是有限的,我真的只知道如何使用基本的Perl.我想一次运行4个XFOIL的实例,全部在自己的核心上.这样的事情
while (1){ for (i = 1..4){ if (! exists XFOIL_instance(i)){ start_new_XFOIL_instance(i,input_parameter_list); } } }
因此,如果每个核心都运行XFOIL,程序正在检查(或者最好是休眠,直到XFOIL实例唤醒以启动新的实例).如果没有,先前的实例退出,我们可以使用新的输入参数列表启动一个新的实例.
如果任何人有任何想法如何实现,请让我知道.这将大大加快我需要生成数据的时间,并让我在航空航天项目本身工作.
谢谢您的帮助!
以下是一些示例代码:
#!/usr/bin/perl use Strict; use warnings; use Parallel::ForkManager; my @input_parameter_list = map { join '_',('param',$_) } ( 1 .. 15 ); my $n_processes = 4; my $pm = Parallel::ForkManager->new( $n_processes ); for my $i ( 1 .. $n_processes ) { $pm->start and next; my $count = 0; foreach my $param_set (@input_parameter_list) { $count++; if ( ( $count % $i ) == 0 ) { if ( !output_exists($param_set) ) { start_new_XFOIL_instance($param_set); } } } $pm->finish; } $pm->wait_all_children; sub output_exists { my $param_set = shift; return ( -f "$param_set.out" ); } sub start_new_XFOIL_instance { my $param_set = shift; print "starTing XFOIL instance with parameters $param_set!\n"; sleep( 5 ); touch( "$param_set.out" ); print "finished run with parameters $param_set!\n"; } sub touch { my $fn = shift; open FILE,">$fn" or die $!; close FILE or die $!; }
您将需要为start_new_XFOIL_instance和output_exists函数提供自己的实现,您还需要定义自己的参数集,以传递给XFOIl.
以上是大佬教程为你收集整理的如何使我的Perl脚本为子进程使用多个内核?全部内容,希望文章能够帮你解决如何使我的Perl脚本为子进程使用多个内核?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。