Python 3 多线程

Python 3 多线程

参考学习网站:菜鸟教程

线程

  • 创建、撤消与切换进程,存在较大的时空开销,所以引入线程

  • 一个程序至少一个进程,一个进程至少一个线程

  • Python中使用线程有两种方式:函数或者用类来包装线程对象。

  • 进程是资源分配的最小单位,线程是程序的最小执行单位

  • 多线程类似于同时执行多个不同程序,多线程运行有如下优点:

    1. 程序进程速度可能加快;

    2. 可以大量创建线程

    3. 线程与线程之间是独立的,并发执行。有好处,在收发数据时;坏处,在赋值时,容易发生错位赋值。

    4. 线程主要针对于具有大量输入、输出以及网络收发数据等限制程序的速度时

      python 3 主要有2个库, threading(推荐),threading(兼容 python 2 )

_thread

Python中使用线程有两种方式:函数或者用类来包装线程对象。

#函数调用
_thread.start_new_thread ( function, args[, kwargs] )
  • function - 线程函数
  • args 传递给线程函数的参数,他必须是个 tuple 类型。(i,)
  • kwargs - 可选参数,字典类型

threading

​ 我们可以通过直接从 threading.Thread 继承创建一个新的子类,并实例化后调用 start() 方法启动新线程,即它调用了线程的 run() 方法:

class myThread (threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        
    def run(self):
        pass

threading 其他方法

  • threading.currentThread() : 返回当前线程变量
  • threading.enumerate() : 返回正在运行的线程 list
  • threading.activeCount() : 返回正在运行的线程数 len(threading.enumerate())

threading,thread 的实例化类方法

  • run() : 线程活动方法 调用 start() 后默认启动
  • start() : 启动线程
  • join([time]) : 等待至对应线程中止,阻塞调用
  • isAlive(): 线程是否活动
  • getName(): 返回线程名
  • setName(): 设置线程名

线程同步

​ 如果多个线程共同对某个数据修改,则可能出现不可预料的结果,

引入锁,在修改数据时,是线程同步—— threading.Lock()

它降低的线程的速度。

threadLock = threading.Lock()			#锁对象实例化 

threadLock.acquire()							#获得锁

#修改数据 排版输出

threadingLock.release							#释放锁

​ 一般搭配队列配合使用,线程从队列中取值,进行运算;

Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 PriorityQueue。

posted @ 2021-10-20 17:26  烟雨断桥  阅读(1021)  评论(0编辑  收藏  举报