你是说用pipe(INFILE,OUTFILE),我这里有多个hash.具体怎么操作啊。能不能帮详细一点,举个例子。
----- Original Message -----From: wbi 畢Sent: Wednesday, August 19, 2009 11:01 AMSubject: [PerlChina] Re: 父子进程间变量共享进程间通信 一般都采用管道
你现在的思路适合改成多线程
> Date: Tue, 18 Aug 2009 19:34:44 -0700
> Subject: [PerlChina] 父子进程间变量共享
> From: linhy0120@gmail.com
> To: perlchina@googlegroups.com
>
> 请教各位一个问题。我有一个程序运行所需时间太长。因此我想编写一个多进程的版本,在父进程中declarey几个hash。在循环中fork出的子进
> 程,对hash添加(key => value)对。循环结束后,再对hash中的数据操作。反映我思路的简单代码如下:
> =========================================
> #! /usr/bin/perl
> use strict;
> use warnings;
>
> my @taskArrary = (1..200) ; # 200个任务
> my (%hash1,%has2);
> my %pid_task ;
> my $maxp = 10 ; # 为了 同时不多于$maxp 个进程 ;
>
> while(my $task = shift @taskArray ){
>
> # 为了 同时不多于$maxp 个进程
>
> if (scalar (keys %pid_task) >= $maxp ){
> my $kid = wait ;
> delete $pid_task{$kid} ;
> }
>
> # fork 子进程,并
> if (my $pid = fork){
> $pid_task{$pid} = $task ;
> }else{
> $hash1{$key1} = $value1 ;
> $hash2{$key2} = $value2 ;
> exit;
> }
> }
>
> #等待所有的子进程结数;
> while (my $kid = wait){
> last if $kid < 0 ;
> }
>
>
> print join "\t", %hash1", "\n" ;
> print join "\t", %hash1", "\n" ;
>
> exit ;
> =====================================
> ;
> 我碰到的问题是:
> 1)在子进程中添加的(key => value)对,在父进程中的hash中似乎丢失了。有没有方法可以使在子进程中对hash的操作,反映到父进程
> 中。
>
> 2)我试过子进程中用dbm与hash相连解决,
> -------------------------------------
> if (my $pid =fork){
> ...
> } else{
> dbmopen (%hash1, $dbmfile, 0644) ;
> dbmopen (%hash1, $dbmfile, 0644) ;
> ...
> dbmclose (%hash1) ;
> dbmclose (%hash1) ;
> }
> ---------------------------------
> 似乎运行正常,没有警告报错信息。但测试时结果与单进程的版本相比,这样所得的hash中的($key,$value)对要少一些,也就是有
> 些(key,value)还是没有传递到print 语句中的hash中去,
>
> 3)另外一个问题是,$maxp小于等于3时,似乎运行正常,没有警告报错信息。但大于等于4时,程序运行一段时间后就会导致机器关机。我的电脑是4核
> 的CPU,是不是因为内核不够多?
>
>
> 请指点谜径。谢谢!
> --~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---
没有评论:
发表评论