紧急的Perl进程变量传递的问题.希望大家帮忙.问题如下.
我建了一个perl脚本.在脚本中.有三个our%hash_1;our%hash_2;our%hash_3;哈希变量.我需要从多两个文件中读取数据.分别放到这三个哈希变量中...
我建了一个perl脚本 . 在脚本中.有三个
our %hash_1;
our %hash_2;
our %hash_3; 哈希变量.
我需要从多两个文件中读取数据.分别放到这三个哈希变量中.
此时我用fork 函数 .开起了两个子进程...
从文件1中取得的数据放到our %hash_1,和our %hash_2中.
从文件2中取得的数据放到our %hash_3中..
取完数据后... 在当前脚本再使用这几个变量.里面的内容都为空...子进程执行完后.没有把数据保留下来.而是跟着子进程的结束而释放了..
那么问题来了, 请问.我怎么样才能把这子进程读取的数据保留到这几个变量中了,让脚本之后的模块使用了? 展开
our %hash_1;
our %hash_2;
our %hash_3; 哈希变量.
我需要从多两个文件中读取数据.分别放到这三个哈希变量中.
此时我用fork 函数 .开起了两个子进程...
从文件1中取得的数据放到our %hash_1,和our %hash_2中.
从文件2中取得的数据放到our %hash_3中..
取完数据后... 在当前脚本再使用这几个变量.里面的内容都为空...子进程执行完后.没有把数据保留下来.而是跟着子进程的结束而释放了..
那么问题来了, 请问.我怎么样才能把这子进程读取的数据保留到这几个变量中了,让脚本之后的模块使用了? 展开
1个回答
展开全部
fork进程的时候把当前进程复制一份,然后子进程做自己的事情,这样子进程中的变量不影响父进程,也就是父进程无法访问子进程自己的变量数值。
子进程要与父进程交换数据,一般使用文件、或者网络作为手段。使用文件就是子进程完成了部分汇总工作后,把汇总结果写入到磁盘文件中,父进程在磁盘文件中进行读取。使用网络就是父进程LISTEN网络端口,子进程连接这个端口上报汇总数据。你可以根据项目的复杂程度、以及汇总数据的大小来选择一种适合你的方式。
子进程要与父进程交换数据,一般使用文件、或者网络作为手段。使用文件就是子进程完成了部分汇总工作后,把汇总结果写入到磁盘文件中,父进程在磁盘文件中进行读取。使用网络就是父进程LISTEN网络端口,子进程连接这个端口上报汇总数据。你可以根据项目的复杂程度、以及汇总数据的大小来选择一种适合你的方式。
追问
非常感谢,请问,那在什么情况下用文件,什么情况下用网络端口了?
网络端口的方法怎么实现了, 这个我不是很明白了,希望能帮忙写个例子行吗?非常感谢.
追答
两种方法都非常麻烦,文件方法编程稍微简单,编程的重点在检测脚本多份并行运行的冲突,如果保证但份执行、没有冲突就非常简单了。缺点是磁盘速度较慢,合生成的数据非常小的情况下稍微好一点。因此,如果生成的数据不大,或者该程序不会同时执行多份的情况下,用文件非常简单和方便。
用网络编程能解决磁盘慢速、并发运行冲突的情况,但是编程非常复杂。其实现过程相当于主程序编写一个TCP服务器(类似WEB、FTP)LISTEN某个端口,而客户编写TCP的客户端(相当于浏览器),客户端汇总完毕后连接127.0.0.1:端口提交数据。例子很多,网上可以搜索PERL聊天程序(TCP)例子代码。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询