python线程的学习

。_饼干妹妹 提交于 2020-02-12 03:44:16

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()

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

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