Python的线程

61 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第21天,点击查看活动详情

Python的线程

通过前几篇的文章我们知道使用多进程可以完成Python的多任务的功能,那么除了多线程的方式还有没有其他的方式呢?没错,是使用线程。

每个进程都至少有一个线程,线程是cpu调度的基本单位,那么怎么使用多线程来完成多任务呢?

线程的使用

同样,我们从一个例子入手,直接放码过来

import threading
import time


def sing():
    current_thread = threading.current_thread()
    print("sing:", current_thread)

    for i in range(5):
        print("唱...")
        time.sleep(0.2)


def dance():
    current_thread = threading.current_thread()
    print("dance:", current_thread)

    for i in range(5):
        print("跳...")
        time.sleep(0.2)


if __name__ == '__main__':
    current_thread = threading.current_thread()
    print("main_thread:", current_thread)

    sing_thread = threading.Thread(target=sing, name="sing_thread")
    dance_thread = threading.Thread(target=dance, name="dance_thread")

    sing_thread.start()
    dance_thread.start()

这段代码的内容你可能比较熟悉,就是实现边唱边跳的功能

第一步就是要导入线程模块,这是使用多线程的第一步

第二步,我们定义唱的函数和跳的函数,便于多线程来调用,同时在函数中通过threading.current_thread()来获取当前的线程并打印出来,

第三步就是在main函数中创建线程,给线程命名

第四步就是启动线程了

多线程的使用步骤和多进程的使用步骤区别不大,都是先导入模块,然后创建线程,最后启动线程三步走的总方针。

线程与进程

而线程在创建的时候也可以通过args和kargs传入参数,这一点和进程也是一样的,一个以元组的形式,一个以字典的形式传参。

线程和进程差不多,执行都是无序的,进程是由操作系统来决定执行顺序,而线程由cpu来决定执行顺序

在生命周期方面,主线程结束,子线程不一定结束,要想上子线程随着主线程的销毁而销毁,需要把子线程设置为主线程的守护线程,比如:sub_thread = threading.Thread(target=cxk, daemon=True) 或者sub_thread.setDaemon(True)

小结

这篇文章我们讲解Pytho完成多任务的另一种方式,就是使用多线程,而多线程的使用和特性和进程并没有太大的区别,理解了进程,线程的使用也就游刃有余了。