翼度科技»论坛 编程开发 python 查看内容

多线程(一)

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
一:什么是多线程

线程是操作系统能够进行运算调度的最小单位;它被包含在进程之中,是进程中的实际运作单位。
多线程,是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。
简单来说:线程是程序中一个单一的顺序控制流程;而多线程就是在单个程序中同时运行多个线程来完成不同的工作。
多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。多线程是在同一时间需要完成多项任务的时候实现的。
二:多线程优缺点

优点:


  • 使用线程可以把占据时间长的程序中的任务放到后台去处理
  • 程序的运行效率可能会提高
  • 可以分别设置各个任务的优先级以优化性能
  • 可以让同一个程序的不同部分并发执行,释放一些珍贵的资源如内存占用等
缺点


  • 更多的线程需要更多的内存空间
  • 因为多线程需要开辟内存,而且线程切换需要时间因此会很消耗系统内存
  • 由于多个线程之间存在共享数据,因此容易出现线程死锁的情况
  • 多线程需要协调和管理,需要CPU时间跟踪线程,线程的终止会对程序产生影响
三:python threading 模块

threading模块是python的内置库,所以无需用pip去下载直接调用就行
  1. import threading
复制代码
注意这里的Thread是大写,因为python对字母的大小写十分敏感
四:多线程开发

1.创建一个Thread对象,并封装线程
  1. t = threading.Thread(target=calculate,args=(n,))
复制代码
第一个参数是线程函数变量,第二个参数args是一个数组变量参数,如果只传递一个值,就只需要n, 如果需要传递多个参数,那么还可以继续传递下去其他的参数,其中的逗号不能少,元组中只包含一个元素时,需要在元素后面添加逗号
2.常见方法
  1. t.start() #线程准备,开始执行
复制代码
  1. t.join() #等待线程任务结束,在向下执行
复制代码
3.线程的简单运用(节省时间)

一个线程(代码依次执行)
  1. ```plaintext
  2. import time
  3. def calculate(n):
  4.     for x in n:
  5.         time.sleep(1)
  6.         print('除法',x%2)
  7. def calculate2(n):
  8.     for x in n:
  9.         time.sleep(1)
  10.         print('乘法',x*2)
  11. n=[1,2,3,4,5,6,7,8]
  12. start=time.time()
  13. calculate(n)
  14. print()
  15. calculate2(n)
  16. end=time.time()
  17. print(end-start)
复制代码
单线程运行俩函数所需的时间为16.106837511062622s
多线程
  1. import threading
  2. import time
  3. def calculate(n):
  4.     for x in n:
  5.         time.sleep(1)
  6.         print('除法',x%2)
  7. def calculate2(n):
  8.     for x in n:
  9.         time.sleep(1)
  10.         print('乘法',x*2)
  11. n=[1,2,3,4,5,6,7,8]
  12. start=time.time()
  13. t1 = threading.Thread(target=calculate,args=(n,))
  14. t2 = threading.Thread(target=calculate2,args=(n,))
  15. t1.start()
  16. time.sleep(2)
  17. t2.start()
  18. t1.join()
  19. t2.join()
  20. end = time.time()
  21. print(end-start)
复制代码
多线程所需时间为10.068055391311646s
五:总结:

以上是多线程中最最最基础的东西
相比之下多线程的效率要比单线程的效率要高,也比较节约时间

来源:https://www.cnblogs.com/yangsanhuo/p/17343673.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具