在Perl中如何派生多进程 -- fork函数

40、Perl函数安全指南 本文详细介绍了多个Perl函数的功能、潜在风险以及安全使用建议。通过对如fcntl、fork、getc、rand等常见函数的风险分析,提出了具体的防护措施,包括输入验证、权限控制、使用安全的随机数生成器以及目录访问限制等。文章还提供了函数风险总结表格和安全措施实施流程图,帮助开发者全面了解并应对Perl编程中的安全挑战,构建更安全可靠的应用程序。 阅读详情
这个函数当前在学校没有搞懂, 刚从学校出来时也没搞懂, 不会用他来写多线程程序. 今天有人问我在Perl中如何进行多进程编程, 去Google了一把, 发现境界好象比以前高了, 因为感觉上懂了一些了. 下面是写的一个例子:
#!/usr/bin/perl
#

my $pid = fork();

if (!defined($pid))
{
   print ("Fork process failured!/n");
   exit();
}

if ($pid)
{
     # This is the child process.
     sleep(1);
     print ("exit child after 10 seconds wait!/n");
     exit();
}
else
{
     # This is the parent process.
     print ("exit parent!/n");
}

    毕业后的这么多年中, 只有用Java来写过多线程序, 不过它可没有fork函数, 但感觉上, 他们也没有什么区别. 看来可以为refresh_mysql.pl角本增加并行执行支持了. cool!

 perl 语言编程实例-多进程篇[转]

  作者:horsley

perl 语言编程实例-多进程篇

perl 语言是一种非常强大的脚本语言,其应用遍及系统维护,CGI,数据库编程。
以下是我遇到的一个具体问题,应用perl获得圆满解决。

问题提出:
某数据库应用。需要检索一批数据(A表,数据量12万左右)。对该批数据
将进行逐一核对,期间将关联三个千万级的表(C,D,E表,分别有近亿条数据),
并将检索状态插入一张新表(F)。

传统解决方案:
编写存储过程。打开一个cursor,对A表遍历,逐一检索C,D,E表。
判断状态写入新表。编程过程十分简单,顺利完成。但执行时效率低下,耗时在
8小时左右,不能满足要求。

分析:
C,D,E表建有极其完备的索引。对单条数据检索极其快速。同时执行时主机CPU

,
内存等资源十分空闲。查询单条记录耗时:8×3600/12万=0.24秒,也是在合理的

范围。
同时主机数据库在业务高峰期时可以支持500-600用户同时登陆(telnet方式)。

以上
说明性能瓶颈不在主机,数据库上。

结论:以上所有都合情合理,采用单进程方式无法进一步提高性能。为提高速度,

只能
采用多进程。


快速构造原型:

原型一:
#!/usr/bin/perl

my $maxchild=20;
foreach $item (1..500) {
while ( `ps -ef|grep $0|wc -l` > $maxchild) { select undef,undef,undef,0.1; };
if ($PID=fork()){
print "Starting Sub_ProcessPID/n";
} else {
print "I will handle dataitem/n";
sleep 1;
exit 1;
};
}

执行以上,正常,子进程控制在20。

以上述脚本为基础,添加数据库部分:

#!/usr/bin/perl

use DBI;


my $dbh=DBI->connect(...);
my $sth=$dbh->prepare(qq/select * from A/);
$sth->execute();
$sth->bind_column(undef,.....);

while ($sth->fetch()) {
while ( `ps -ef|grep $0|wc -l` > $maxchild) { select undef,undef,undef,0.1; };
if ($PID=fork()) {
print "Starting Sub_ProcessPID/n";
} else {
query(B,C,D); #执行数据库操作
insert(E);
exit 1;
}
}
$sth->finish();
$dbh->disconnect();

确保无语法错误,执行。处理一两条数据后脚本报错,中断。具体错误略。

分析:程序框架没错,但是在fork子进程时,$dbh同时被子进程继承,导致该数据

库连接反复使用。
由于数据库底层的某种原因,对该种操作是不允许的。结论:以上简单的多进程方

式不可行。数据库
连接部分必须同 fork 分离。

######################################

考虑很久,设计如下原型:将打开A表的cursor单独提出,结果传给另外一个进程

。
12万数据较大,作为参数传递似乎不妥,考虑利用管道通信。



原型二:
############################

分成 getdata,setdata两个程序。首先建立管道 : mknod data.pipe p

cat getdata:

#!/usr/bin/perl

use DBI;
open(DATAPIPE,">./data.pipe") or die "$!/n";

my $dbh=DBI->connect(...);
my $sth=$dbh->prepare(qq/select * from A/);
$sth->execute();
$sth->bind_column(undef,.....);

while ($sth->fetch()) {
print DATAPIPE data.....;
}
close(DATAPIPE);

######################

cat setdata:

#!/usr/bin/perl
use DBI;
open(DATAPIPE,"<./data.pipe") or die "$!/n";

my $pipecount=0;
my $maxlines=2000;
my @lines=();

while($record=<DATAPIPE>) {
$pipecount++;
push @lines,$record;

unless ($pipecount % $maxlines) {
if ($PID=fork()){
print "Starting Sub_Process:$PID/n";
@lines=();
}else{
my $dbh=DBI->connect(...);
foreach (@lines) {
handle_data($_);
}
$dbh->disconnect();
exit 1;
}
}
}

my $dbh=DBI->connect(...);
foreach (@lines) {
handle_data($_);
}

$dbh->disconnect();

以上脚本运行正常,执行时启动:12万/$maxlines= 60个子进程。
处理完所有数据耗时在 10分钟左右,效率提高几十倍。

脚本执行方式:./getdata&./setdata
Perl多进程技术在自动化测试中的应用 本文内容包括:Perl的多进程自动化测试场景介绍应用Perl多进程技术到自动化测试脚本小结参考资料在IT产品系统测试的自动化项目中,经常有并行处理多个子任务的需求,为了提高测试效率,就需要用到多进程或者多线程编程。文章介绍了Perl多进程的用法和适用场景,以及Perl多进程和多线程的关系。同时结合企业级IT产品系统测试的自动化特点,介绍了Perl多进程在这方面的应用。Perl的多进程Perl的多进程Perl语言是一种非常强大的脚本语言,其广泛应用于系统维护,CGI(CommonGatewayInterface)编程,数据库编程和自动化测试中。多任务和并发处理一度被看作是判定优异操作系统的一个特 立即下载

相关推荐

Crossformer实战:从零开始搭建多变量时间序列预测模型(附ETTh1数据集调参指南)

本文提供了从零开始搭建Crossformer多变量时间序列预测模型的实战指南,并附有详细的ETTh1数据集调参攻略。文章深入解析了Crossformer的核心设计,重点探讨了seg_len和win_size等关键参数对模型性能的影响,并分享了环境配置、训练调试及常见问题的解决方案,帮助开发者高效应用这一前沿深度学习模型。

weixin_29281915的博客 317

Perl多进程

本文关于Perl进程的内容主体来自于《Pro Perl》的第21章。 创建新进程 Perl中可以使用fork函数来创建新的进程,它会调用操作系统的fork系统调用来创建新进程。 fork是Unix系统中的函数,在Windows中不原生支持fork。但从Perl 5.8开始,Perl提供了一个模拟的fork使其可以无视平台的差异,它是使用Perl解释器线程来实现的fork,因为解释器线程不自动共享数...

weixin_30338743的博客 625

LPDDR4x 深度解析(3) - SDRAM核心操作机制

本文深入解析LPDDR4x SDRAM的核心操作机制,包括基础架构、刷新操作、读写流程及低功耗设计。详细介绍了存储阵列、地址解码器等关键模块,以及自刷新与自动刷新模式的区别。通过实测数据和技术细节,揭示LPDDR4x在性能优化和功耗控制方面的创新设计,为硬件工程师提供实用参考。

weixin_29278805的博客 308

Perl多进程实战

转自http://bbs.scmroad.com/viewthread.php?tid=3917perl作为一种解释性的语言,很受广大系统管理员的欢迎,好处么就不多说了,坏处也有不少,例如对线程的支持,就一直不咋地,所以大多数情况下,我们都需要多个进程,来帮助我们完成工作,闲话少

ace_fei的专栏 2751

金融风控实战:用Python从零搭建贷款违约预测模型(附完整数据集)

本文详细介绍了如何使用Python从零构建金融风控中的贷款违约预测模型,涵盖数据清洗、特征工程、模型构建与评估等全流程。通过实战案例展示逻辑回归、XGBoost和LightGBM三大算法的对比,特别强调AUC-ROC指标在金融风控中的重要性,并附完整数据集和代码实现。

weixin_29175469的博客 237

【3DSlicer】基于心脏ct影像重建3d模型及导出

软件:3DSlicer4.11 基于心脏ct影像重建3d模型

Liuees的博客 1万+

perl实现多进程的操作

并行对多个节点进行操作处理

haiqinma的专栏 2189

YOLO26涨点改进 | 全网独家复现、小目标检测改进篇 | TGRS 2025 | YOLO26引入MFAE-YOLO中的GFFP、FCPS 和 C3k2-FPEU创新点,涨点起飞,直接发论文

🔥本文给大家介绍在YOLO26中引入MFAE-YOLO中的 GFFP(全局特征融合处理)、FCPS(特征通道像素注意力) 和 C3k2-FPEU(特征池提取单元) 二次创新改进模块,能显著提升对小目标的检测性能。GFFP通过多尺度特征融合增强全局上下文感知能力,有效提升小目标在复杂背景下的可辨性;FCPS融合通道、像素和空间注意力机制,增强了模型对关键细节和小区域特征的关注,提升检测精度;C2F-FPEU利用多种池化方式挖掘细节特征,优化浅层特征表示能力。三者协同提升了YOLO26在小目标检测中的鲁棒性。

Ai缝合怪、助力小伙伴高效发论文 305

perl中创建多进程

本次项目中为了提高软件的运行效率,需要对pptx文件进行异步解压,通过运行发现Windows下多进程执行异常(调用fork函数创建子进程), 调用exe执行奔溃。其他非Windows平台好像没有这个问题。 解决方法: 在Windows下可以使用Win32::Process模块创建子进程,...

weixin_30466421的博客 355

UG\NX二次开发 获取三平面交点

//如果返回值不为0 则此三个面没交点 int three_faces_point(tag_t tagFace1, tag_t tagFace2, tag_t tagFace3, double *dou_x, double *dou_y, double *dou_z)

王牌飞行员_里海的博客 674

1.1什么是Zephyr?与FreeRTOSRT-Thread对比

我自己的项目里,三个系统都用过。这个芯片的原厂BSP哪个OS做得最靠谱?(实测,别看广告)项目核心需求是不是某个OS的“长板”?(别为了10%的功能牺牲90%的稳定性)团队三个月后能不能愉快地维护代码?(开发体验影响长期生产力)最后送一句干货:选型定不下来时,拿一块项目用的开发板,分别用三个OS跑同一个demo(比如按键控制LED+串口打印)。移植过程遇到的问题、代码看起来舒不舒服,你的直觉会告诉你答案。嵌入式没有完美解,只有适合当下的解。选好了,就踏实地写代码;

m0_50546716的博客 653

Perl 多进程与多线程编程

PERL 多进程与多线程编程能大大加快程序执行效率(将一个任务分割成若干小任务并行处理)。要进行多进程和多线程编程则分别需要两个模块, fork()和Threads,然而fork()则为PERL内置函数,因此,只需安装Threads模块(如需变量共享,还需安装Thread::Shared模块)。安装方法如下:     1)Win+R, 打开运行:                    2)在

海云之家 1万+

小白也能轻松部署 OpenClaw:OpenClaw可视化部署工具+OpenClaw可视化管理工具分享

分享一个OpenClaw可视化一键部署工具,帮你快速打造属于自己的AI助手 🚀

XiaoqiangClub的博客 6710

perl函数说明(fork)

fork 这个函数通过调用 fork(2) 系统调用,从一个进程中创建两个进程。如果它成功,该函数给父进程返回新创建的子进程 ID,而给子进程返回 0。如果系统没有足够的资源分配一个新的进程,那么调用失败并返回 undef。文件描述符(以及有时候还有在那些描述符上的锁)是共享的,而所有其他的东西都是拷贝的——或者至少看起来是那样的。 在早于 5.6 版本的 Perl 里,未冲刷的缓冲区在

紫轩阁 5189

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Perl多进程实践——fork

perl作为一种解释性的语言,很受广大系统管理员的欢迎,好处么就不多说了,坏处也有不少,例如对线程的支持,就一直不咋地,所以大多数情况下,我们都需要多个进程,来帮助我们完成工作,闲话少说,上代码。 #!/usr/bin/perl # test_proc.pl # test multi process # create by lianming: 2009-08-12 use strict;

1291

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Perl多进程实战之一

perl作为一种解释性的语言,很受广大系统管理员的欢迎,好处么就不多说了,坏处也有不少,例如对线程的支持,就一直不咋地,所以大多数情况下,我们都需要多个进程,来帮助我们完成工作,闲话少说,上代码。 #!/usr/bin/perl # test_proc.pl # test multi process # create by  lianming: 2009-08-12 use st

boyishachang的专栏 518

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

perl多进程实战之一

perl作为一种解释性的语言,很受广大系统管理员的欢迎,好处么就不多说了,坏处也有不少,例如对线程的支持,就一直不咋地,所以大多数情况下,我们都需要多个进程,来帮助我们完成工作,闲话少说,上代码。   #!/usr/bin/perl # test_proc.pl # test multi process # create by lianming: 2009-08-12   u

kongjunlongaa的博客 989

fork详解

这个函数通过调用 fork(2) 系统调用,从一个进程中创建两个进程。如果它成功,该函数给 父进程返回新创建的子进程 ID,而给子进程返回0。如果系统没有足够的资源分配一个新的 进程,那么调用失败并返回undef。文件描述符(以及有时候还有在那些描述符上的锁)是共享的,而所有其他的东西都是拷贝的——或者至少看起来是那样的。 在早于 5.6 版本的 Perl 里,未冲刷的缓冲区在两个进程里都是没有

勤劳的小蜜蜂 392

perl语言中 fork()、exec()、waitpid() 、 $? >> 8 组合

@[TOC](perl语言中 fork()、exec()、waitpid() 、 $? >> 8 组合)示例: waitpid() $? >> 8 组合使用 参考 https://www.jc2182.com/perl/perl-fork-func.html https://blog.youkuaiyun.com/holden_liu/article/details/100174792 https://blog.youkuaiyun.com/zjwson/article/details/5333......

dujidan的博客 1013
上一篇: Linux下的多线程编程
下一篇: SQL Server 2000基础教程——字符串函数
suacker
博客等级 码龄24年 46粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值