[Python]多线程--threading模块实现
来源:互联网 发布:我想在淘宝上卖东西 编辑:程序博客网 时间:2024/05/18 03:33
#!/usr/bin/env python#coding=utf-8#来源: python核心编程 多线程章节import threadingfrom time import ctime,sleep,time '''使用建立实例的方法使用threading的多线程方法,建立2个线程,熟悉线程的基本操作''''''#创建一个thread实例,传给他一个函数secds=[4,2] #每个线程停顿的时间def loop(nloop,secds): print 'the loop',nloop,'started',ctime() sleep(secds) print 'the loop',nloop,'stoped',ctime() #maindef main(): print 'mian thread started ',ctime() threads=[] nloops=range(len(secds)) #创建所有线程的实例 for i in nloops: threadins=threading.Thread(target=loop,args=(i,secds[i])) #这里的target等参数不能省略 threads.append(threadins) #依次启动所有子线程 for i in nloops: threads[i].start() #等待所有线程结束 for i in nloops: threads[i].join() print 'all threads done ',ctime() if __name__=='__main__': main()'''#创建一个Thread,传给他一个可调用类的对象,这次是把方法变成对象传入,很少见到这么用,测试有点问题#程序是能跑了 但是这个d到底是什么还是没搞明白'''secds=[1,5]#子线程对应的类class ThreadFun(object): def __init__(self,args): self.args = args def __call__(self): #自动调用 apply(self.loop,self.args) def loop(d,nloop,nsec): #这种调用方法 这里会多加一个参数 #print dir(d) #print tpye(d) #tpye not defined !! print '\-'*20 print 'loop',nloop,'start',ctime() sleep(nsec) print 'loop',nloop,'stop',ctime() def main(): print 'start :',ctime() threads=[] nloops = range(len(secds)) for i in nloops: t=threading.Thread(target=ThreadFun((i,secds[i]))) threads.append(t) for i in nloops: threads[i].start() #start all threads for i in nloops: threads[i].join() #wait for all threads done print 'all thread done' ,ctime() if __name__=='__main__': main()'''#下面是我们最常用的一个方法,就是继承类实现多线程#这个是引用tutorialspoint的代码exitFlag = 0class myThread (threading.Thread): #继承threading.Thread def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.counter = counter def run(self): print "Starting " + self.name print_time(self.name, self.counter, 6) #循环6次,每次执行了得线程都要打印一次 print "Exiting " + self.namedef print_time(threadName, delay, counter): while counter: if exitFlag: thread.exit() sleep(delay) print "%s: %s" % (threadName, ctime(time())) counter -= 1# Create new threadsthread1 = myThread(1, "Thread-1", 1)thread2 = myThread(2, "Thread-2", 2)# Start new Threadsthread1.start()thread2.start()print "Exiting Main Thread" #还有一个常用的模块就是Queue