博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python基础(八)——多线程
阅读量:5993 次
发布时间:2019-06-20

本文共 4720 字,大约阅读时间需要 15 分钟。

[root@bogon python]# cat test.py #!/usr/bin/ptyhonimport threadimport timedef print_time(threadName,delay):    count=0    while count<5:          time.sleep(delay)        count+1        print "%s: %s"%(threadName,time.ctime(time.time()))try:    thread.start_new_thread(print_time,('Thread 1:',1))    thread.start_new_thread(print_time,('Thread 2:',2))except:    print 'error:fail to start'while 1:    pass[root@bogon python]# python test.py Thread 1:: Sun Jun 18 18:00:01 2017Thread 2:: Sun Jun 18 18:00:02 2017Thread 1:: Sun Jun 18 18:00:02 2017Thread 1:: Sun Jun 18 18:00:03 2017//线程模块[root@bogon python]# cat b.py #!/usr/bin/pythonimport threadingimport timeexitFlag=0class myThread(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,5)        print "exiting "+self.namedef print_time(threadName,delay,counter):    while counter:        if exitFlag:            threading.Thread.exit()        time.sleep(delay)        print "%s: %s"%(threadName,time.ctime(time.time()))        counter-=1thread1=myThread(1,'Thread 1: ',1)thread2=myThread(2,'Thread 2: ',2)thread1.start()thread2.start()print "exiting main thread"[root@bogon python]# ./b.pyStarting  Thread 1: Starting  Thread 2: exiting main threadThread 1: : Sun Jun 18 18:15:24 2017Thread 1: : Sun Jun 18 18:15:25 2017Thread 2: : Sun Jun 18 18:15:25 2017Thread 1: : Sun Jun 18 18:15:26 2017Thread 1: : Sun Jun 18 18:15:27 2017Thread 2: : Sun Jun 18 18:15:27 2017Thread 1: : Sun Jun 18 18:15:28 2017exiting Thread 1: Thread 2: : Sun Jun 18 18:15:29 2017Thread 2: : Sun Jun 18 18:15:31 2017Thread 2: : Sun Jun 18 18:15:33 2017exiting Thread 2: [root@bogon python]# //线程同步[root@bogon python]# cat c.py#!/usr/bin/python# -*- coding: UTF-8 -*-import threadingimport timeclass myThread (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       # 获得锁,成功获得锁定后返回True       # 可选的timeout参数不填时将一直阻塞直到获得锁定       # 否则超时后将返回False        threadLock.acquire()        print_time(self.name, self.counter, 3)        # 释放锁        threadLock.release()def print_time(threadName, delay, counter):    while counter:        time.sleep(delay)        print "%s: %s" % (threadName, time.ctime(time.time()))        counter -= 1threadLock = threading.Lock()threads = []# 创建新线程thread1 = myThread(1, "Thread-1", 1)thread2 = myThread(2, "Thread-2", 2)# 开启新线程thread1.start()thread2.start()# 添加线程到线程列表threads.append(thread1)threads.append(thread2)# 等待所有线程完成for t in threads:    t.join()print "Exiting Main Thread"[root@bogon python]# ./c.pyStarting Thread-1Starting Thread-2Thread-1: Sun Jun 18 18:25:39 2017Thread-1: Sun Jun 18 18:25:40 2017Thread-1: Sun Jun 18 18:25:41 2017Thread-2: Sun Jun 18 18:25:43 2017Thread-2: Sun Jun 18 18:25:45 2017Thread-2: Sun Jun 18 18:25:47 2017Exiting Main Thread[root@bogon python]# //线程的优先级队列#!/usr/bin/python# -*- coding: UTF-8 -*- import Queueimport threadingimport timeexitFlag = 0 class myThread (threading.Thread):    def __init__(self, threadID, name, q):        threading.Thread.__init__(self)        self.threadID = threadID        self.name = name        self.q = q    def run(self):        print "Starting " + self.name        process_data(self.name, self.q)        print "Exiting " + self.namedef process_data(threadName, q):    while not exitFlag:        queueLock.acquire()        if not workQueue.empty():            data = q.get()            queueLock.release()            print "%s processing %s" % (threadName, data)        else:            queueLock.release()        time.sleep(1) threadList = ["Thread-1", "Thread-2", "Thread-3"]nameList = ["One", "Two", "Three", "Four", "Five"]queueLock = threading.Lock()workQueue = Queue.Queue(10)threads = []threadID = 1 # 创建新线程for tName in threadList:    thread = myThread(threadID, tName, workQueue)    thread.start()    threads.append(thread)    threadID += 1# 填充队列queueLock.acquire()for word in nameList:    workQueue.put(word)queueLock.release() # 等待队列清空while not workQueue.empty():    pass # 通知线程是时候退出exitFlag = 1 # 等待所有线程完成for t in threads:    t.join()print "Exiting Main Thread"以上程序执行结果:Starting Thread-1Starting Thread-2Starting Thread-3Thread-1 processing OneThread-2 processing TwoThread-3 processing ThreeThread-1 processing FourThread-2 processing FiveExiting Thread-3Exiting Thread-1Exiting Thread-2Exiting Main Thread....

转载于:https://www.cnblogs.com/biaopei/p/7730574.html

你可能感兴趣的文章
absolute布局和css布局释疑
查看>>
Linux shell编程与实践(八)之使用脚本监控网站的核心服务
查看>>
SpringBoot获取Freemarker模板引擎,生成HTML代码
查看>>
文件系统的设计与实现(操作系统课程设计)
查看>>
AFN
查看>>
JavaEE(13) - JPA属性映射
查看>>
CSharp设计模式读书笔记(2):工厂方法模式(学习难度:★★☆☆☆,使用频率:★★★★★)...
查看>>
开发中总结的各种源码,给大家分享
查看>>
洗礼灵魂,修炼python(43)--巩固篇—经典类/新式类
查看>>
Gradle使用国内的maven仓库
查看>>
MVC中CRUD
查看>>
nyoj-68-三点顺序-计算几何
查看>>
使用 Spring Boot WebSocket 创建聊天室
查看>>
编码和解码总结
查看>>
【前端】Ubuntu16下nodejs+npm+vue环境配置
查看>>
数据类型的转换
查看>>
类图的总结与学习 OOA
查看>>
Oracle报错:missing right parenthesis什么问题?
查看>>
pg安装入门
查看>>
USB的挂起和唤醒 (Suspend and Resume)〈转〉
查看>>