#!/usr/bin/env python# -*- coding: utf-8 -*-import datetimeimport timeimport threadingdef backup(backup_number_per,backup_server_ip,check_time_period):time.sleep(2)print(backup_number_per,backup_server_ip,check_time_period)current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')# 统计备份策略表里全部的目标备份机,而后每一个线程用一个备份机进行备份backup_server_ip_list = ['172.10.10.1','172.10.10.2','172.10.10.3']thread_list = [] #线程存放列表backup_number_per=3 # 每次最多备份几个DBcheck_time_period=10for backup_server_ip in backup_server_ip_list:print 'starting Thread backup to %s' % (backup_server_ip)t =threading.Thread(target=backup,args=(backup_number_per,backup_server_ip,check_time_period,))t.setDaemon(True)thread_list.append(t)for t in thread_list:t.start()for t in thread_list:t.join()print current_time+' All Backup Finish!!!'结果:![]()
在线程里,常常会用到setDaemon()和join()方法。1)setDaemon()方法理解:主线程A中,建立了子线程B,而且在主线程A中调用了 B.setDaemon(),这个意思是把主线程A设置为守护进程,这时候,要是A执行结束了,无论B是否完成,一并和A退出。必选在start()方法调用以前设置,若是不设置为守护进程,程序会被无限挂起,只有等待了全部线程结束它才结束。2)join()方法:主线程A中,建立了子线程B,而且在主线程A中调用了B.join(),那么A会在调用的地方等待,直到子线程B完成操做后,才能够接着往下执行,那么在调用这个线程时可使用被调用线程的join方法,join([timeout])里边的参数是可选的,表明线程运行最大时间,若是超过这个时间,无论此线程是否执行完毕都会被回收,而后主线程或函数都会接着执行的,若是线程执行时间小于参数表示的时间,则接着执行,不用必定要等到参数表示的时间