首页 > 编程语言 >python-多线程

python-多线程

时间:2022-11-19 13:01:44浏览次数:64  
标签:多线程 python 李四 线程 ------ ----- 执行

 

首先了解多线程之前先科普一下并发以及并行的概念,这两者大家很容易混淆.

 

  一,意思不同

  1、并发:并发是指两个或多个事件在同一时间间隔发生。

  2、并行:并行是指两个或者多个事件在同一时刻发生。

  二,处理方式不同

  1、并发:并发在一台处理器上同时处理多个任务。

  2、并行:并行在多台处理器上同时处理多个任务。

  三,python 不能处理并行只能处理并发场景

  在跑python代码时我们可以开很多个线程让他们并发执行,但是这个并发只能在该进程被分配的CPU上运行也就是说只能有一个CPU在跑这个线程。

  这是因为python有一个全局解释器锁GIL。每个线程都要先取得这个锁才能被CPU调用运行,那么,什么是 GIL 呢?GIL 是最流程的 CPython 解释器

  (平常称为 Python)中的一个技术术语,中文译为全局解释器锁,其本质上类似操作系统的 Mutex。GIL 的功能是:在 CPython 解释器中执行的每

  一个 Python 线程,都会先锁住自己,以阻止别的线程执行。

 

python 多线程:

  线程是CPU分配资源的基本单位。当一程序开始运行,这个程序就变成了一个进程,而一个进程相当于一个或者多个线程,程序的运行速度可能加快

  多线程的创建方式:

  1.from threading import Thread :通过导入threading 模块中的Thread 类创建

  2.threading.Thread :可以通过类的继承方式进行创建

  Thread创建线程的初始化参数:
1.target:指定线程执行的任务函数
2.name: 给线程起的名字 (默认的线程命名:Thread-1,Thread-2....)
3.daemon: 是否设置为守护线程
守护线程:主线程(主程序)执行结束,不管线程中的任务是否执行完毕 强制关闭线程
4.args:给任务函数传参 (位置参数)
5.kwargs:给任务函数传参(关键字参数)

一,通过第一种方式实现多线程任务执行
实例:不使用多线程执行任务,所有事物处理花费的时间总共11秒左右处理完毕
# 新建两个任务,我们看下两个运行完成所需要花费的时间
def work(name):
    for i in range(5):
        print(f"{name}------正在做事情1------")
        time.sleep(1)


def task2(name):
    for i in range(6):
        print(f"{name}-----正在做事情2------")
        time.sleep(1)

start_time = time.time()
work("张三")
work1("李四")
end_time = time.time()
print("===============运行结束================")
print(end_time - start_time)

=====================运行结果========================
张三------正在做事情1------
张三------正在做事情1------
张三------正在做事情1------
张三------正在做事情1------
张三------正在做事情1------
李四-----正在做事情2------
李四-----正在做事情2------
李四-----正在做事情2------
李四-----正在做事情2------
李四-----正在做事情2------
李四-----正在做事情2------
===================运行结束======================
11.03499460220337

  

 例: 使用多线程执行任务,本身单任务的执行方法,两条任务执行完成的时间11秒多,但是多线程的模式可以最多6秒钟执行完毕,

  每条线程执行不同的任务.

# ===========通过多线程实现多任务运行的模式================

def work():
    for i in range(5):
        print(f"张三------正在做事情1------")
        time.sleep(1)


def work1():
    for i in range(6):
        print(f"李四-----正在做事情2------")
        time.sleep(1)

Thread(target=work).start()
Thread(target=work1).start()

===================输出结果========================
张三------正在做事情1------
李四-----正在做事情2------
张三------正在做事情1------李四-----正在做事情2------

张三------正在做事情1------李四-----正在做事情2------

张三------正在做事情1------李四-----正在做事情2------

李四-----正在做事情2------张三------正在做事情1------

李四-----正在做事情2------

  

 

二,通过第二种继承的方式实现多线程执行,run方法是Thread里面的任务执行方法,可以通过在子类从写父类的run的执行任务.

"=======通过继承父类的方式实现多线程==============="

class Test(Thread):

    def run(self):
        for i in range(6):
            print("执行工作1")

a = Test()
b = Test()
a.start()
b.start()

"=================输出结果=================="
执行工作1
执行工作1
执行工作1
执行工作1
执行工作1
执行工作1
执行工作1
执行工作1
执行工作1
执行工作1
执行工作1
执行工作1

 

 


 

标签:多线程,python,李四,线程,------,-----,执行
From: https://www.cnblogs.com/manxingsir/p/16905899.html

相关文章