开启掘金成长之旅!这是我参与「掘金日新计划 · 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完成多任务的另一种方式,就是使用多线程,而多线程的使用和特性和进程并没有太大的区别,理解了进程,线程的使用也就游刃有余了。