博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Perl的多进程框架(watcher-worker)
阅读量:7223 次
发布时间:2019-06-29

本文共 1941 字,大约阅读时间需要 6 分钟。

  关于perl的多进程,大家可能马上会想到这个模块。但是今天我们试着自己动手写一个类似的框架:)

  该多进程开发模型从开源服务器框架发展而来,核心思路是父进程监控子进程的状态并负责回收,子进程负责任务的执行。当前预先可以设置子进程并发数目的上限值。如需要涉及到进程间的通信,可以通过建立管道pipe的方式,让子进程在结束前将数据通过共享管道写入,待父进程适时读取即可。

   本人在工作中进程遇到这样的场景,如从DB取若干任务,收包等等(不停的取/收),为了保证效率,一般都采取并发执行;使用脚本主要为了轻量级,易部署。这种场景下很适合用这种watcher-worker模式。perl代码如下:

  

1 #!/usr/bin/perl -w 2  3 #author:pandaychen 4 #date:2015-04-01 5 #info:实现一个简单的多进程框架 6  7 use strict; 8 use warnings; 9 use POSIX ":sys_wait_h";10 11 my $max_process = 20;12 my $cur_process =0;13 14 my @pid_array;15 16 print "perl fork watcher-worker:\n";17 18 #main start here19 CreateWorker($max_process);    20 21 #child start here22 do_workers();23 24 sub CreateWorker{25     my $workers=shift(@_);26     print $workers,"\n";27     28         my $sign = 1;29         30         while($sign){31             if($workers >0){32                 my $pid = fork();33                 if($pid >0){34                     #watcher35                     $sign = 1;36                     --$workers;37                 }38                 elsif($pid == 0){39                     #workers40                     $sign = 0;41                     print "create worker ",$$," success!\n" ;42                     do_workers();43                 }44                 else45                 {46                     print "fork error: %s\n";47                     return -1;48                 }49             }50             else{51                 #full workers52                 my $nStatus;53                 while ((my $collect = waitpid(-1, WNOHANG)) > 0)54                 {55                     print $collect," child process\n";56                     $workers++;57                 }58             }59         }60     return 0;61 }62 63 sub do_workers{64     #模拟子进程工作65     my $rand=int(rand(10));66     sleep($rand);67     print "child process sleep ",$rand," seconds.\n";68     exit(1);69 }

执行结果如下:

 

转载于:https://www.cnblogs.com/panada/p/5461466.html

你可能感兴趣的文章
CloudCC:部署并有效使用CRM系统的诀窍
查看>>
看不见的面孔:“炫技派”、“勒索派”之外,黑客有何新类型
查看>>
Serverless发展早有“端倪”,函数计算源于场景需求
查看>>
中国某厂商几乎所有产品都含隐藏后门 攻击者可获取root权限shell
查看>>
喷子注意了!Google 推 AI 工具筛选恶意言论
查看>>
Windows 正不可避免地变成某种订阅系统
查看>>
Qt之XML
查看>>
《AngularJS深度剖析与最佳实践》一1.5 实现更多功能:主题
查看>>
JavaScript 超级 BUG!多款 x86/ARM 处理器瞬间遭破解
查看>>
Apache 宣布 Log4j 1 版本生命周期终结
查看>>
恢复 WordPress 4.4 被移除的“获取短链接”按钮
查看>>
有观点称 Linux 粉丝是时候对闭源软件张开双臂
查看>>
基础架构联盟:自由软件最佳实践
查看>>
《音乐达人秀:Adobe Audition实战200例》——实例10 播放卡拉OK视频,录制歌声
查看>>
《CUDA C编程权威指南》——2.5 总结
查看>>
《大规模Java平台虚拟化与调优》——第2章 现代化可扩展的数据平台
查看>>
Chrome 加入防篡改系统,可抵御量子计算机攻击
查看>>
程序员编程时喝什么?
查看>>
《Internet 路由结构(第2版•修订版)》一3.2 IP地址空间耗尽问题
查看>>
《数论概论(原书第4版)》一第3章 勾股数组与单位圆
查看>>