新手!!求见谅!!望多指点
由于工作原因,试用期需要学习python,因为运维工作全都是由python完成,幸好有点python基础,知道什么是列表,元组,字符,字典什么的,要不然死翘翘的。
创建多线程主要的步骤有:
1、创建一个函数,这个函数是多线程需要多次运行的内容
2、利用for循环生成对应函数的多个成品(就是说这个函数已经赋予了需要的参数了,直接运行就可以的了)
3、利用for循环开始执行函数
4、利用for循环使主程序挂起,等待子进程完成后再执行其他动作
--------------------以下是一个事例,用于向对应的不同IP地址同时传输文件,当然,这个没有在生产环境上测试过,只是在测试机做了测试
#!/usr/bin/python
import time,threading,sys,os
control_thread=threading.Semaphore(10)#控制一次能够运行多少的线程
if len(sys.argv) != 2:
print 'error'
sys.exit(10)
def READY(IP):#这里,就是要运行的程序了,相当于说明的第一点
IP=IP.strip()
if control_thread.acquire():
try:
assert 0 != os.system('/usr/bin/rsync -az /opt/test %s:/var/tmp' % (IP))
except:
print IP.strip(),threading.currentThread().getName(),'send fail'
else:
print IP.strip(),threading.currentThread().getName(),'SUCCESS'
finally:
control_thread.release()
def ACTION():
FILE=sys.argv[1]
X=[]
for i in open(FILE):#多次调用该函数,让X成为一个将要操作的列表,相当于说明的第二点
T=threading.Thread(target=READY,args=(i,))
X.append(T)
for i in range(len(X)):#开始执行,相当于说明的第三点
X[i].start()
for i in range(len(X)):#等待子进程结束才执行下面的动作,相当于说明的第四点
X[i].join(60)
print 'start time: ',time.ctime(),'\n'
ACTION()
print '\n','end time: ',time.ctime(),'\n'