• Python多线程


    #!/usr/bin/env python3
    #coding=utf-8
    
    import threading
    import time
    import ThreadTime
    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("开始线程:"+self.name)
            print_time(self.name,self.counter,5)
            print("退出线程:"+self.name)
    
    def print_time(threadName,delay,counter):
        while counter:
            if exitFlag:
                threadName.exit()
            time.sleep(delay)
            print("%s:%s"%(threadName,time.ctime(time.time())))
            counter-=1
    #创建连个线程
    try:
        #创建新线程
        thread1=myThread(1,"Thread-1",1)
        thread2=myThread(2,"Thread-2",2)
        #开启新线程
        thread1.start()
        thread2.start()
        thread1.join()
        thread2.join()
        print("退出主线程")
    except:
        print("Error:无法启动线程")
    #线程同步
    #
    !/usr/bin/env python3 #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("开启线程:"+self.name) #获取锁,用于线程同步 threadLock.acquire() print_time(self.name,self.counter,6) #释放锁,开启下一个线程 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("退出线程"+t.name) print("退出主线程")
    #!/usr/bin/env python3
    #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 ("开启线程:" + self.name) process_data(self.name, self.q) print ("退出线程:" + 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 ("退出主线程")

    运行结果:

    开启线程:Thread-2
    开启线程:Thread-3
    Thread-1 processing One
    Thread-3 processing Two
    Thread-2 processing Three
    Thread-1 processing Four
    Thread-3 processing Five
    退出线程:Thread-2
    退出线程:Thread-1
    退出线程:Thread-3
    退出主线程

    目前还在学习中,希望会对大家有所帮助,觉得不错,就点赞支持一下。 另外,转载时请附带链接。谢谢!
  • 相关阅读:
    【工作感悟】2022年8月23日
    [Anaconda]查看anaconda的方法
    [MACOS]BOOKS
    Mac_每次都要执行source ~/.bash_profile 配置的环境变量才生效
    [Anaconda]查看当前已经激活的anaconda的方法
    解决:DeprecationWarning: executable_path has been deprecated, please pass in a Service object
    [BREW]如何在MAC上安装Consolas
    20220917
    对net5.0的理解
    如何做到高效CI/CD
  • 原文地址:https://www.cnblogs.com/dangkai/p/8392386.html
Copyright © 2020-2023  润新知