Python基础--线程

Python基础–线程

线程的理解

  • 线程是cpu调度(执行)的单位
  • 程序会自动启用一个主线程
  • 子线程是人为创建

    线程是在进程的基础上进行运行的,可以说,没有进程就不会产生线程. ==在当前进程下的所有线程下,变量是被共享的==
    线程的执行方式稍微有一点奇怪,在人们看来可以说是同时执行的,但是其实不是的. 线程是有CPU分配资源,随机进行运行的.每个线程都会运行一小段时间,然后运行其他线程.

线程的作用

  • 完成多任务,提高cpu效率
  • 线程的执行是需要CPU的调度完成

    多线程的使用

    1
    2
    3
    导包 import threading
    加入任务 threading.Thread(target=任务名)
    开启 xxx.start()

参考实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import time		 # 导入时间包
import threading # 导入线程包


def dance():
"""执行跳舞"""
while True:
print("跳舞")
time.sleep(5)


def song():
"""执行唱歌"""
while True:
print("唱歌")
time.sleep(5)




def main():
"""多线程开启"""
# threading.Thread(target=任务名)
thread_song = threading.Thread(target=song)
thread_dance = threading.Thread(target=dance)
# 开启
thread_song.start()
thread_dance.start()


if __name__ == '__main__':
main()

多线程传参两种方式

  • args使用元组

    • 表示已元组的方式传参
    • 传的元素位置需要与函数的形参位置一一对应
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      import threading
      import time


      def dance():
      """执行跳舞"""
      while True:
      print("跳舞")
      time.sleep(1)


      def song(name,age):
      """执行唱歌"""
      while True:
      print("唱歌",name,age)
      time.sleep(1)


      def main():
      """入口函数"""
      # 一边唱歌一边跳舞
      thread_song = threading.Thread(target=song,args=("小白",18))

      thread_song.start()


      if __name__ == '__main__':
      main()
  • kwargs使用字典

    • 表示以字典的形式传参
    • 因为是无序的,所有key和参数对应,vlaue就是参数
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      import threading
      import time


      def dance(name,age):
      """执行跳舞"""
      while True:
      print("跳舞")
      time.sleep(1)


      def song(name,age):
      """执行唱歌"""
      while True:
      print("唱歌",name,age)
      time.sleep(1)


      def main():
      """入口函数"""
      # 一边唱歌一边跳舞
      thread_song = threading.Thread(target=song,args=("小白",18))
      thread_song.start()

      thread_dance = threading.Thread(target=dance,kwargs={"age":18,"name":"小花"})
      thread_dance.start()

      if __name__ == '__main__':
      main()

多线程的注意点

  • 主线程会等待子线程结束而结束
  • 守护线程,只要主线程结束守护线程就结束
  • 线程执行是无序的
  • 线程之间共享全局变量(共享就会有资源竞争的问题)
  • 资源竞争解决方案
    • 同步join
      • join函数是将多个线程或者进程按照单线程的方式执行,执行了一个线程之后再去执行另外一个线程
      • 缺点运算速度比较慢
    • 互斥锁
坚持原创技术分享,您的支持将鼓励我继续创作!
0%