一篇文章让你学会python线程

目录

1.线程的概念

2.进程和线程之间关系

3.使用threading模块创建线程

4.使用继承方式开启线程

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

6.共享全局变量的问题

7.同步异步的概念

 

8.互斥锁

9.死锁

10.线程队列Queue

11.生产者与消费者模型

12.GIL全局解释锁


 

 

 

 

1.线程的概念

由于进程是资源拥有者,创建、撤消与切换存在较大的内存开销,因此需要引入轻型进程

即线程,

进程是资源分配的最小单位,线程是CPU调度的最小单位(程序真正执行的时候调用的是线程).每一个进程中至少有一个线程。 

 

2.进程和线程之间关系

 

 

3.使用threading模块创建线程

from threading import Thread
import time


def sing():
    for i in range(3):
        print('正在唱歌。。。', i)
        time.sleep(2)


def dance():
    for i in range(3):
        print('正在跳舞。。。', i)
        time.sleep(2)


def main():
    t1 = Thread(target=sing)
    t2 = Thread(target=dance)
    t1.start()
    t2.start()


if __name__ == '__main__':
    main()
    print('程序结束。。。')

执行顺序:

首先程序运行时,程序从上往下走,遇到main()函数然后开始执行,执行mian()函数的函数体时又创建了两个线程我们称之为子线程,程序运行时的线程我们称之为主线程

然后子线程根据target=xxx 开始执行指定的函数

(等子线程结束后主线程结束,程序结束了)

 

(1)传递参数 :给函数传递参数,使用线程的关键字 args=()进行传递参数

 

(2).join()方法 :当前线程执行完后其他线程才会继续执行。

import time

import threading


def sing():
    for i in range(3):
        print('.....正在唱歌.....', i)
        time.sleep(1)


def dance():
    for i in range(3):
        print('....正在跳舞....', i)
        time.sleep(1)


def main():
    t1 = threading.Thread(target=sing)
    t2 = threading.Thread(target=dance)
    t1.start()
    # t1.join()   # 效果  t1 执行完后,体 和主线程同时执行
    t2.start()
    t1.join()  # 效果  t1  t2 执行完以后,主线程才执行


if __name__ == '__main__':
    main()
    print('程序结束了。。。')

 

(3).setDaemon() 方法 :

setDaemon()将当前线程设置成守护线程来守护主线程:

 -当主线程结束后,守护线程也就结束,不管是否执行完成。

 -应用场景:qq 多个聊天窗口,就是守护线程。

注意:需要在子线程开启的时候设置成守护线程,否则无效。

from threading import Thread
import time


def sing(num):
    for i in range(num):
        print('正在唱歌。。。', i)
        time.sleep(2)


def dance(num):
    for i in range(num):
        print('正在跳
  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值