初试python多线程传输文件

新手!!求见谅!!望多指点


由于工作原因,试用期需要学习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'			
		


你可能感兴趣的:(多线程,error,主程序)