免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: jhualin
打印 上一主题 下一主题

求助:读取不到文件内容 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-06-10 02:47 |只看该作者
cdtits 发表于 2012-06-09 11:48
open 后加上如下试试:



还是不行。

论坛徽章:
0
12 [报告]
发表于 2012-06-10 09:12 |只看该作者
jhualin 发表于 2012-06-09 11:42
问题在于读文件的时候,那2个文件的内容还是空的;但是程序运行完后,文件内容有了;是不是当时内容还没 ...


在读文件前,先sleep(2);这样就能读到文件了,问题解决了,根因不清楚。

论坛徽章:
0
13 [报告]
发表于 2012-06-11 10:47 |只看该作者
## request
open(REQ_FILE, ">$req_file") or die $!;
## response
open(RSP_FILE, ">$rsp_file") or die $!;
## join
open(JOIN_FILE, ">$join_file") or die $!;
## result
open(OUT_FILE, ">$Output_FileName") or die $!;
是不是有问题 
## request
open(REQ_FILE, ">>$req_file") or die $!;
## response
open(RSP_FILE, ">>$rsp_file") or die $!;
## join
open(JOIN_FILE, ">>$join_file") or die $!;
## result
open(OUT_FILE, ">>$Output_FileName") or die $!;

论坛徽章:
0
14 [报告]
发表于 2012-06-17 05:41 |只看该作者
yizhengming 发表于 2012-06-11 10:47
## request
open(REQ_FILE, ">$req_file") or die $!;
## response


问题不在这里,问题在于本程序使用了子进程,而子进程与父进程是同时执行的,所以,当父进程执行到读取文件的时候,文件可能还没有数据。
解决的方法是:父进程在执行下面的程序前,先等待子进程结束
## wait until the sub-process finished
my $if_exist_sub = 1;
while ($if_exist_sub>0){ ## wait until the sub-process finished
        sleep(1);
        $if_exist_sub=wait();
}

但是,由此我遇到另一个问题,子进程执行之后产生的散列,父进程不能读取;这个问题定位了半天,才发现没有理解进程的概念。为了解决问题,我将多进程改回成单一进程,但是执行效率低了很多,每次处理3W多个文件,耗时特别长;

估计只有多线程才能解决问题,但多线程我不会啊,也没很多时间去学,各位大侠能否指点?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP