新手!!求见谅!!望多指点
由于工作原因,试用期需要学习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‘
本文出自 “要做一只博学多才的运维狗” 博客,请务必保留此出处http://kekeung.blog.51cto.com/2339469/1575894
原文地址:http://kekeung.blog.51cto.com/2339469/1575894