美文网首页Pythonpython
Python多线程实践

Python多线程实践

作者: 刘小白DOER | 来源:发表于2021-08-07 22:28 被阅读0次

    笔者以前测试过两个案例,都涉及到多线程的运用。特别是第二个ping功能,运用队列queue来完成数据交互。今天就来总结一下Python多线程。

1、Python实现MySQL 压测工具

2、Shell和Python实现网络ping功能

一、python的多线程

    python的全局解释器锁(GIL)会限制并发,在任意时刻只有一个线程在处理python代码。程序是cpu密集型的额,多线程无法提升程序的执行效率,如果程序是IO密集型的,多线程可以提高整个程序的下效率。

    python的多线程使用标准库的threading的Thread类。

二、python的多线程测试

    下面三个程序。第一个是循环调用函数say_hi,第二个是5个多线程执行say_hi,第三个是say_hi函数延时1秒钟。

    来看一下各个程序的执行时间。第一个和第二个程序的执行时间差不多,第三个程序在say_hi函数延时1秒钟后的时间只有1.031秒。如果程序是cpu密集型,那么使用多线程的意义不大,反而会因为开启多线程而影响效率。

三、线程传递参数    

    在python中线程传递参数十分简单, 通过threading.Thread类调用args参数传递,所有参数 都是通过元组的形式传递。

三、继承线程

    通过继承threading.Thread类来重定义多线程,需要在子类中实现run方法即可。新类MyThread重新定义构造函数__init__ ,并使用父类的构造函数__init__,在构造函数__init__中添加成员变量count和name。

    关于继承的更多知识,请参考文章-Python面向对象实践

四、线程同步与互斥锁

    多个线程存在资源共享,对于每次只能一个线程操作数据,可以将操作放在acquire和release中。

也可以使用上下文管理器来直接的方便的管理锁资源。

        下面的案例是多线程操作全局变量num,如果不使用互斥锁,那么计算出来的结果每次都不一样。在使用时,需要thread.join()来阻塞调用,直到线程终止,不然在线程有结束前,就会print过早的结果。

五、线程安全队列queue    

        笔者使用Shell和Python实现网络ping功能 来做说明。读取文件,将文件中的每一行入队列,再多线程的调用函数is_reacheable来非阻塞式的出队列完成ping功能,在队列为空时,退出循环。

    我们可以查看标准库中queue.py的源码中的含义具体定义。里面定义了三个队列:Queue(先进先出队列)、LifoQueue(后进先出队列)、PriorityQueue(优先级队列)。使用的最多的就是先进先出队列。

        再来看一下官方给的如何等待排队的任务被完成的示例

        task_done()表示前面排队的任务已经被完成。被队列的消费者线程使用。每个get()被用于获取一个任务, 后续调用 task_done()告诉队列,该任务的处理已经完成。join()阻塞至队列中所有的元素都被接收和处理完毕。

相关文章

  • Python多线程实践

    笔者以前测试过两个案例,都涉及到多线程的运用。特别是第二个ping功能,运用队列queue来完成数据交互。今天...

  • python多进程

    参考: python并发编程之多进程(实践篇)python中的多线程无法利用多核优势,如果想要充分地使用多核CPU...

  • iOS多线程-GCD实践

    推荐文章 iOS多线程-NSThread实践 iOS多线程-NSOperation实践 Grand Central...

  • iOS多线程04-NSOperation实践

    推荐文章 iOS多线程01-介绍iOS多线程02-NSThread实践iOS多线程03-GCD实践iOS多线程04...

  • iOS多线程-NSThread实践

    推荐文章 iOS多线程-NSOperation实践 iOS多线程-GCD实践 NSThread是基于线程使用,轻量...

  • GIL

    谈谈python的GIL、多线程、多进程 最近在看 Python 的多线程,经常我们会听到老手说:“python下...

  • iOS多线程-NSOperation实践

    推荐文章 iOS多线程-NSThread实践 iOS多线程-GCD实践 NSOperation只是一个抽象类,所以...

  • Python多线程编程——多线程编程中的加锁机制

    如果大家对Python中的多线程编程不是很了解,推荐大家阅读之前的两篇文章:Python多线程编程——多线程基础介...

  • Python多线程买票程序实践

    【背景】模拟卖票程序,50个窗口同时卖5000张票从中可以观察5000张票的临界资源怎么被争夺 【运行结果】 运行...

  • 5-线程(补充)

    Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了...

网友评论

    本文标题:Python多线程实践

    本文链接:https://www.haomeiwen.com/subject/iscgvltx.html