python之多线程

和自甴很熟 提交于 2019-11-30 04:10:29

线程:实现多任务的另一种方式

一个进程中,也经常需要同时做多件事,就需要同时运行多个‘子任务’,这些子任务,就是线程
线程又被称为轻量级进程(lightweight process),是更小的执行单元

一个进程可拥有多个并行的(concurrent)线程,当中每一个线程,共享当前进程的资源

一个进程中的线程共享相同的内存单元/内存地址空间可以访问相同的变量和对象,而且它们从同一堆中分配对象通信、数据交换、同步操作

由于线程间的通信是在同一地址空间上进行的,所以不需要额外的通信机制,这就使得通信更简便而且信息传递的速度也更快

线程和进程的区别

进程是系统进⾏资源分配和调度的⼀个独⽴单位

进程在执⾏过程中拥有独⽴的内存单元, ⽽多个线程共享内存, 从⽽极⼤地提⾼了程序的运⾏效率
⼀个程序⾄少有⼀个进程,⼀个进程⾄少有⼀个线程

线程是进程的⼀个实体,是CPU调度和分派的基本单位,它是⽐进程更⼩的能独⽴运⾏的基本单位

线程⾃⼰基本上不拥有系统资源,只拥有⼀点在运⾏中必不可少的资源,但是它可与同属⼀个进程的其他的线程共享进程所拥有的全部资源

线程的划分尺度⼩于进程(资源⽐进程少), 使得多线程程序的并发性⾼

线程不能够独⽴执⾏, 必须依存在进程中

线程和进程在使⽤上各有优缺点: 线程执⾏开销⼩, 但不利于资源的管理和保护; ⽽进程正相反

在这里插入图片描述

threading模块

python的thread模块是⽐较底层的模块,在各个操作系统中表现形式不同(低级模块)(了解就好)
python的threading模块是对thread做了⼀些包装的, 可以更加⽅便的被使⽤(高级模块)
thread 有一些缺点,在threading 得到了弥补,所以可直接学习threading

import threading
print('主线程%s启动'%(threading.current_thread().name))
    #任何进程默认会启动一个线程,这个线程称为主线程,主线程可以启动新的子线程
    #current_thread():返回当前线程的实例
    #.name :当前线程的名称


》》》
主线程MainThread启动

创建子线程

创建线程的两种方式:
第一:通过 threading.Thread 直接在线程中运行函数;
第二:通过继承 threading.Thread 类来创建线程;
这种方法只需要重载 threading.Thread 类的 run 方法,然后调用 start()开启线程就可以了

import threading, time


def test01():
    print(threading.current_thread().name)
    time.sleep(1)
    print('good')


print(threading.current_thread().name)
for i in range(3):
    t = threading.Thread(target=test01)
    t.start()

》》》
MainThread
Thread-1
Thread-2
Thread-3
good
good
good
import threading


class Mytest01(threading.Thread):
    def test01(self):
        for i in range(3):
            print(i)


if __name__ == '__main__':
    t1 = Mytest01()
    t2 = Mytest01()
    t1.start()
    t2.start()

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!