python线程的学习

1. 什么是线程

由于进程是资源拥有者,创建、撤消与切换存在较大的内存开销,因此需要引入轻型进程 即线程, 进程是资源分配的最小单位,线程是CPU调度的最小单位(程序真正执行的时候调用的是线程)。每一个进程中至少有一个线程。

2. 进程与线程的关系

举个栗子:一个屋子里有很多人,那么这个屋子就相当于一个进程,里面的每一个人就相当于一个线程。但进程不只是包含线程,还包含其他资源,数据库等。进程是资源的集合。

3. 进程与线程的区别和联系

运行方式不同:

进程不能单独执行,它只是资源的集合。进程要操作CPU,必须要先创建一个线程,所有在同一进程中的线程,是同享同一块进程所占的内存控件。

联系:

进程中第一个线程是主线程,主线程可以创建其他线程,其他线程也可以创建主线程,线程之间是平等的。

线程的实例方法:(了解即可)

 - getName(): 获取线程的名称。 - setName(): 设置线程的名称。 - isAlive(): 判断当前线程存活状态。

4. run方法的继承:

代码演示:

#父类
class A:
    def __init__(self):
        print("父类init被触发")
    def run(self):
        print("父类的run方法被调用")

#子类
class B(A):
    def run(self):
        print("子类的run方法被调用")
if __name__ == '__main__':
    b=B()
    b.run()

运行结果:在这里插入图片描述

5. 线程之间共享的全局变量:

代码演示:

import threading

num = 100

def work1():
    global num
    num  += 1
    print("work1...",num)

def work2():
    global num
    num += 1
    print("work2...",num)

def main():
    t1 =threading.Thread(target=work1)
    t2 =threading.Thread(target=work2)
    t1.start()
    t2.start()

if __name__ == '__main__':
    main()

运行结果:
在这里插入图片描述

6. 共享全局变量的问题:

代码演示:

import time
import random
from threading import Thread

num = 100

def work1():
    global num
    for i in range(3):
        num += 1
        time.sleep(random.random())
        print("in work1,num = %d " %num)
        
def work2():
    global num

    for i in range(3):
        num += 1
        time.sleep(random.random())
        print("in work2,num = %d" %num)
        
if __name__ == '__main__':
    t1 = Thread(target=work1)
    t2 = Thread(target=work2)
    t1.start()
    t2.start()

运行结果:
在这里插入图片描述

发布了49 篇原创文章 · 获赞 5 · 访问量 2007

猜你喜欢

转载自blog.csdn.net/qq_44619595/article/details/104267509