记录错误程序
来源:互联网 发布:阿里云活体核验照片 编辑:程序博客网 时间:2024/05/02 11:23
昨天快下班的时候发现发邮件的程序出现了问题。原因是:
同事每次需要我发送的邮件量月30多封,而我的程序每分钟只发送20封甚至更少。我又是放到crond里跑的,所以问题就出现了,crond没有等上个程序运行完毕又开始了下一个作业!(OMG)
之前做过将perl程序做成deamon的东西,之后我就想是不是因为一分钟间隔太长了,所以又把程序做成了deamon,时时在跑。但是随后我发现,这样问题仍旧没有解决,发送出去的信件还是很少。
问题在哪里呢?
查原程序,我的程序大致逻辑是这样的:
模块:
然后,就用一个脚本调用我的module了:
仔细分析一下就会发现,每循环一次 @list,就调用一次sendMail,即建立一次SMTP连接,我调试的时候发现,光建立这个连接就要耗时5s!难怪程序慢呢。
随后,我将 NET::SMTP->new从 sendmail移动到模块的new 里,然后又建立了一个 sub finish{}函数用于关闭 SMTP连接 :(将sendMail里的注释掉)
同事每次需要我发送的邮件量月30多封,而我的程序每分钟只发送20封甚至更少。我又是放到crond里跑的,所以问题就出现了,crond没有等上个程序运行完毕又开始了下一个作业!(OMG)
之前做过将perl程序做成deamon的东西,之后我就想是不是因为一分钟间隔太长了,所以又把程序做成了deamon,时时在跑。但是随后我发现,这样问题仍旧没有解决,发送出去的信件还是很少。
问题在哪里呢?
查原程序,我的程序大致逻辑是这样的:
模块:
package MySMTP
...
sub new {
my $self = {};
$self->{DBH} = DBI->connect_cached(....);
return $self;
}
sub get_list {
...
return @list;
}
sub sendMail { # 这个sub大部分是直接copycpan上的,没怎么理解
my ($self,$to,$content) = @_;
$self->{SMTP} = Net::SMTP->new("xx.xx.xx.xx"); #同网段的SMTP
$self->{SMTP}->mail(xxx.s@soch.com);
$self->{SMTP}->to($to);
$self->{SMTP}->data();
$self->{SMTP}->datasend
$self->{SMTP}->datasend("/n");
$self->{SMTP}->datasend('To: '.$to);
$self->{SMTP}->datasend("/n");
$self->{SMTP}->datasend('Content-type:text/html;Charset=utf8');
$self->{SMTP}->datasend("/n");
$self->{SMTP}->datasend("Subject: hello");
$self->{SMTP}->datasend("/n/n");
$self->{SMTP}->datasend("$content/n");
$self->{SMTP}->dataend();
$self->{SMTP}->quit;
}
然后,就用一个脚本调用我的module了:
...
use MySMTP;
$mail = new MySMTP();
my @lists = $mail->get_list();
for my $addr (@list) {
$mail->sendMail($addr,"how are you");
}
仔细分析一下就会发现,每循环一次 @list,就调用一次sendMail,即建立一次SMTP连接,我调试的时候发现,光建立这个连接就要耗时5s!难怪程序慢呢。
随后,我将 NET::SMTP->new从 sendmail移动到模块的new 里,然后又建立了一个 sub finish{}函数用于关闭 SMTP连接 :(将sendMail里的注释掉)
sub finish {在脚本的最后再调用此方法!最终问题得以解决。每次建立smtp连接一次,大约5s。但是后来的发送邮件,20~40封之内的,耗时至多两秒,呵呵。总共说来,1分钟跑一次处理任务是绰绰有余啊。
my $self = @_;
$self->{SMTP}->quit;
}
- 记录错误程序
- 程序调试错误记录
- 程序错误记录
- 程序错误记录
- android 录音程序错误记录
- 今天记录:asp程序错误提示
- 【错误记录】CDT写多线程程序
- Ubuntu14.04 运行程序错误,调试记录
- [c++]记录Windows程序“应用程序错误”到异常日志
- [c++]记录Windows程序“应用程序错误”到异常日志
- [c++]记录Windows程序“应用程序错误”到异常日志
- [c++]记录Windows程序“应用程序错误”到异常日志
- mysql存储过程记录错误和退出程序
- 关于程序中记录错误日志的方法
- ++与--(程序中不经意间出的错误记录)
- 关于Visual Studio c#程序.netframework错误的解决记录
- MVC中Spring配置以及程序启动出现错误记录
- 错误记录
- Java对像类型举例说明
- 二维码会成为杀手级应用吗?
- 递归算法的一个例子
- Vsftpd.conf配置文件说明
- UML精粹学习笔记(转)
- 记录错误程序
- JAVA应用程序开发 知识总结
- 智能指针的标准之争:Boost vs. Loki
- 设计模式总结
- 新手入门学习:浅析c/c++中的指针
- 学习ie5.5的Element Behaviors笔记
- 北京纪事——搬家记
- Java/WebService 入门与使用
- 在自定义Server Control中捆绑JS文件 Step by Step (.cs文件打包到dll中)