zoukankan      html  css  js  c++  java
  • python基础(八)——多线程

    [root@bogon python]# cat test.py 
    #!/usr/bin/ptyhon
    import thread
    import time
    def 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 2017
    Thread 2:: Sun Jun 18 18:00:02 2017
    Thread 1:: Sun Jun 18 18:00:02 2017
    Thread 1:: Sun Jun 18 18:00:03 2017
    
    
    //线程模块
    [root@bogon python]# cat b.py 
    #!/usr/bin/python
    import threading
    import time
    exitFlag=0
    class 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.name
    def print_time(threadName,delay,counter):
        while counter:
            if exitFlag:
                threading.Thread.exit()
            time.sleep(delay)
            print "%s: %s"%(threadName,time.ctime(time.time()))
            counter-=1
    thread1=myThread(1,'Thread 1: ',1)
    thread2=myThread(2,'Thread 2: ',2)
    thread1.start()
    thread2.start()
    print "exiting main thread"
    [root@bogon python]# ./b.py
    Starting  Thread 1: 
    Starting  Thread 2: 
    exiting main thread
    Thread 1: : Sun Jun 18 18:15:24 2017
    Thread 1: : Sun Jun 18 18:15:25 2017
    Thread 2: : Sun Jun 18 18:15:25 2017
    Thread 1: : Sun Jun 18 18:15:26 2017
    Thread 1: : Sun Jun 18 18:15:27 2017
    Thread 2: : Sun Jun 18 18:15:27 2017
    Thread 1: : Sun Jun 18 18:15:28 2017
    exiting Thread 1: 
    Thread 2: : Sun Jun 18 18:15:29 2017
    Thread 2: : Sun Jun 18 18:15:31 2017
    Thread 2: : Sun Jun 18 18:15:33 2017
    exiting Thread 2: 
    [root@bogon python]# 
    
    //线程同步
    
    [root@bogon python]# cat c.py
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import threading
    import time
    class 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 -= 1
    
    threadLock = 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.py
    Starting Thread-1
    Starting Thread-2
    Thread-1: Sun Jun 18 18:25:39 2017
    Thread-1: Sun Jun 18 18:25:40 2017
    Thread-1: Sun Jun 18 18:25:41 2017
    Thread-2: Sun Jun 18 18:25:43 2017
    Thread-2: Sun Jun 18 18:25:45 2017
    Thread-2: Sun Jun 18 18:25:47 2017
    Exiting Main Thread
    [root@bogon python]# 
    
    
    
    
    
    //线程的优先级队列
    #!/usr/bin/python
    # -*- coding: UTF-8 -*- 
    import Queue
    import threading
    import time
    exitFlag = 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.name
    def 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-1
    Starting Thread-2
    Starting Thread-3
    Thread-1 processing One
    Thread-2 processing Two
    Thread-3 processing Three
    Thread-1 processing Four
    Thread-2 processing Five
    Exiting Thread-3
    Exiting Thread-1
    Exiting Thread-2
    Exiting Main Thread
    ....
  • 相关阅读:
    写作 —— 细节与画面感
    写作 —— 细节与画面感
    诸子经典 —— 《管子》
    诸子经典 —— 《管子》
    金庸小说的模式
    金庸小说的模式
    SQLite中如何用api操作BLOB类型的字段
    Android WebView挂马漏洞--各大厂商纷纷落马
    [置顶] android开发之来电自动拒接并自动回复短信_上课模式app
    步步为营Hibernate全攻略(四)剪不断理还乱之:复合主键 && 组合映射
  • 原文地址:https://www.cnblogs.com/biaopei/p/7730574.html
Copyright © 2011-2022 走看看