Python多线程

本文最后更新于:4 年前

Python多线程运用


Threading

  • 一些基本常用的功能:

    • .active_count() (有几个线程存在)
    • .start() (开始运行某个线程)
    • threading.Thread(target = … , name = …) (创建一个新的线程)
      • 一般来说还要定义一个函数,就是你要干什么,然后把具体的函数传入到线程中,初始化创建线程的时候,赋值给target
    • .enumerate() (显示线程具体的信息)
    • .current_thread (现在正在运行的线程)
  • join功能:

    • .join() 等待上面的线程运行完了,join()指令下面的命令才会执行嗷!

    其实本质上不是这样理解的哦,join()指令是让主函数main()等待它的执行完成

  • queue功能:

    • 原理: 多线程内的return函数失效了,一般数据先暂存于queue中,等待程序线程全部执行完毕后,再打印输出

    • 首先多线程的数据如果像保存一般都是用queue来保存的

    • 先初始化每个线程,让他们执行特定功能,然后一定要用join(),等所有线程的程序都运行完了,再去读取存在queue中的数据,然后最后打印输出

    • 基本函数:

      • def multithreading():
            q = Queue()
            threads = []
            data = [[1,2,3],[3,4,5],[4,4,4],[5,5,5]]
            for i in range(4):
                t = threading.Thread(target=job,args=(data[i],q))
                t.start()
                threads.append(t)
            # 相当于添加了四个线程
            for thread in threads:
                thread.join()
            results=[]
            
            for _ in range(4):
                results.append(q.get())
            print(results)
        
      • 同时,每个函数的运行结果,要用q.put(result)捕捉,线程运行完了之后,再去用q.get()来进行提取。

  • lock功能:

    • 如果多个线程同时处理一个变量,那么就会直接爆炸,不知道处理的啥,这个时候就应该锁死一个线程,当这个线程运行结束之后,再去运行另一个线程,以避免冲突!
    • lock = threading.Lock()
    • global lock引入这个锁之后,在线程运行之前和之后,可以用lock.acquire()和lock.release()来指定线程的锁死和结束

Python多线程
https://alexanderliu-creator.github.io/2021/02/20/python-duo-xian-cheng-zi-xue/
作者
Alexander Liu
发布于
2021年2月20日
许可协议