Python-20-多线程

本文详细介绍了Python中的多线程,包括线程的概念、使用方法、带参数的任务执行、线程执行顺序、守护线程、线程间共享全局变量及可能的错误、线程同步的互斥锁和死锁问题,以及进程与线程的对比分析,强调了GIL对线程的影响和线程的优缺点。
摘要由CSDN通过智能技术生成

多线程

一、线程

在Python中,实现多任务也可以使用多线程。

多线程一般用于轻量级的多任务,多线程是CPU调度的基本单位。

在Python中,多进程可以使用多个CPU,多线程只能使用一个CPU核心。原因CPython源码实现了GIL(全局解释器锁)

GIL的实现原理:

  1. 设置GIL锁;
  2. 多个线程抢占CPU资源,线程1抢到了资源
  3. 线程在GIL内执行,运行情况有两种:
    1. 被动:由于CPU时间片轮转,让线程休眠,释放GIL锁;
    2. 自动:线程1主动休眠(中断)、让步(yielded)释放;
  4. 多个线程再抢占资源,比如线程2抢到资源;
  5. 循环这个过程。

多线程一般用于网络信息的传输、多文件的读写、数据库的IO等等属于轻量的多任务。

二、线程的使用

  • 语法
import threading

threading.Thread(group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None)

  • 代码
import threading
import time


def sing(n):
    for _ in range(n):
        print('sing...')
        time.sleep(0.2)

def dance(n):
    for _ in range(n):
        print('dance...')
        time.sleep(0.2)


if __name__ == '__main__':
    t1 = threading.Thread(target=sing, args=(5,))
    t2 = threading.Thread(target=dance, args=(5,))
    t1.start()
    t2.start()

三、线程执行带参数的任务

def demo_01(name, age):
    print(name, age)


if __name__ == '__main__':
    t1 = threading.Thread(target=demo_01, args=('zhangsan',), kwargs={
   'age':18})
    t1.start()

四、线程的执行顺序

线程的执行是无序的,由CPU来调度;

进程的执行是无序的,由操作系统来调度。

import threading
import time

def demo_01():
    time.sleep
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值