`
superlxw1234
  • 浏览: 542527 次
  • 性别: Icon_minigender_1
  • 来自: 西安
博客专栏
Bd1c0a0c-379a-31a8-a3b1-e6401e2f1523
Hive入门
浏览量:43267
社区版块
存档分类
最新评论

perl的多线程脚本示例

    博客分类:
  • perl
阅读更多
#!/usr/bin/perl -w

use strict;
use Data::Dumper;
use POSIX;
use Getopt::Long;
use threads ('exit' => 'threads_only');
use List::Util 'shuffle';
use Thread::Semaphore;
use threads::shared;
use File::Basename;

##设置并行线程数
my $semaphore_cnt = Thread::Semaphore->new(100);

my @hosts = ();

open (HOSTFILE,"</home/hdfs/lxw/mapred.hosts") or die "failed to open hostfiles to read\n";
while (<HOSTFILE>) {
	chomp;
	push @hosts,$_;
}
close HOSTFILE;


foreach my $host (@hosts) {
		$semaphore_cnt->down();
		my $t = threads->create(\&deleteFiles,$host);
		foreach my $thr (threads->list(threads::joinable)){
			$thr->join();
		}
}


foreach my $thr (threads->list()){
    $thr->join();
}

sub deleteFiles() {
	my $host = $_[0];
	my $command = qq(source /etc/profile
		source /etc/bashrc
		ssh $host -p 58422 -t 'sudo nohup sh /tmp/del.sh'
);
	my $start_time = &getNowTime();
	my $result = system($command);
	my $end_time = &getNowTime();
	if ("$result" eq "0") {
		&wirteLog($host . "  start:" . $start_time . " end:" . $end_time . "\n");
		$semaphore_cnt->up();
	} else {##failed
		$semaphore_cnt->up();	
	}
}


sub getNowTime {
    my ($sec,$min,$hour,$day,$mon,$year) = (localtime(time))[0,1,2,3,4,5];
    sprintf "%4d-%02d-%02d %02d:%02d:%02d",$year+1900,$mon+1,$day,$hour,$min,$sec;
}

sub wirteLog {
	my ($msg) = @_;
	my $logFile = "/tmp/delete_tobedeleted.log";
	open LOGFILE,">>$logFile" or die "failed to open $logFile to write\n";
	print LOGFILE $msg;
	close LOGFILE;
}
 
0
5
分享到:
评论

相关推荐

    unix平台下c语言高级编程指南

    本书范例丰富,且具有代表性,如Socket编程、客户/服务端编程、多线程开发、CGI编程、X Windows下的Motif编程等。读者直接或只需稍作修改就可以将它们应用到自己的应用程序开发中。这些范例的源代码可以从配套光盘的...

    [完整][中文][WEB安全测试].(美)霍普.扫描版.pdf

     本书中的秘诀所覆盖的基础知识包括了从观察客户端和服务器之间的消息到使用脚本完成登录并执行Web应用功能的多阶段测试。在本书的最后,你将能够建立精确定位到Ajax函数的测试,以及适用于常见怀疑对象(跨站式脚本...

    MySql 5.1 参考手册.chm

    5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 ...

    MYSQL中文手册

    5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行...

    mysql官方中文参考手册

    5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 ...

    MySQL 5.1参考手册中文版

    5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项...

    MySQL 5.1参考手册

    5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 ...

    MySQL5.1参考手册官方简体中文版

    5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 ...

    MySQL 5.1中文手冊

    5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 ...

    MySQL 5.1参考手册 (中文版)

    5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 ...

    MySQL 5.1官方简体中文参考手册

    5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 ...

    java开源包1

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包11

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包2

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包3

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包6

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包5

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

Global site tag (gtag.js) - Google Analytics