python 2种创建多线程的方法
多个线程是可以操作同一个全局变量的,因此,可以通过这种方式来判断所有线程的执行进度
# 第一种方法:将要执行的方法作为参数传给Thread的构造方法 import threading import time liste = ["a","s","v","dd","ee"] def action(a): print threading.currentThread() time.sleep(2) liste.remove(a) print liste print("-------------") if __name__ == "__main__": for item in liste: a = threading.Thread(target = action, args = (item,)) a.start()
# 第二种方法:从Thread继承,并重写run() #!-*- coding:utf-8 -*- import threading import time liste = ["a","s","v","dd","ee"] class myThread(threading.Thread): def __init__(self, arg): # threading.Thread.__init__(self) # 这2种方法都可以使用 super(myThread, self).__init__() self.arg = arg def run(self):# 这个函数定义每个线程要执行的代码,可以嵌套函数 self.action() def action(self): print threading.currentThread() time.sleep(2) liste.remove(self.arg) print(liste) print("-------------") if __name__ == "__main__": for item in liste: a = myThread(item) a.start()
多线程执行代码块,并获取每个线程中代码块返回的数据
import threading class MyThread(threading.Thread): def __init__(self,func,args=()): super(MyThread,self).__init__() self.func = func self.args = args def run(self): self.result = self.func(self.args) print(self.result) def get_result(self): try: return self.result # 如果子线程不使用join方法,此处可能会报没有self.result的错误 except Exception: return None def MySSH(dic): return 0 if __name__=="__main__": result_list = [] thread_list = [] for item in host_list: t = MyThread(MySSH, args=(item)) thread_list.append(t) t.start() for t in thread_list: t.join() # 一定要join,不然主线程比子线程跑的快,会拿不到结果 result_list.append(t.get_result()) return result_list