python-线程

程序、进程、线程的普通理解
程序: /bin/firefox是一个二进制程序, (eg:python, Java程序), 是一个真实存在的, 可以看到的实体;
进程: 执行程序的过程中产生的一系列内容,(计算机给进程分配了内存, cpu等…)
线程: 是执行进程

专业的总结:

  • 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,
    是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
  • 线程,有时被称为轻量进程(Lightweight Process,LWP),是程序
    执行流的最小单元。是被系统独立调度和分派的基本单位。

一个进程里面必然有一个主线程
操作线程的模块:
thread
threading

Python 的标准库提供了两个模块: thread 和 threading , thread 是低级模块, threading是高级模块,对 thread 进行了封装。绝大多数情况下,我们只需要使用 threading 这个高级模块。

1.创建一个线程

import threading
import time


def job():
    print("这是一个需要执行的任务。。。。。")
    print("当前线程的个数:", threading.active_count() )
    print("当前线程的信息:", threading.current_thread())
    time.sleep(10)  # 为了观看实验效果
if __name__ == '__main__':
    job()

输出:

这是一个需要执行的任务。。。。。
当前线程的个数: 1
当前线程的信息: <_MainThread(MainThread, started 140618575836992)>

2.线程的生命周期图

所谓的xx生命周期,其实就是某对象的包含产生和销毁的一张状态图。线程的生命周期如下图所示:
在这里插入图片描述各状态的说明如下:

New新建。新创建的线程经过初始化后,进入Runnable状态。

Runnable就绪。等待线程调度。调度后进入运行状态。

Running运行。

Blocked阻塞。暂停运行,解除阻塞后进入Runnable状态重新等待调度。

Dead消亡。线程方法执行完毕返回或者异常终止。

可能有3种情况从Running进入Blocked:

同步:线程中获取同步锁,但是资源已经被其他线程锁定时,进入Locked状态,直到该资源可获取(获取的顺序由Lock队列控制)

睡眠:线程运行sleep()或join()方法后,线程进入Sleeping状态。区别在于sleep等待固定的时间,而join是等待子线程执行完。sleep()确保先运行其他线程中的方法。当然join也可以指定一个“超时时间”。从语义上来说,如果两个线程a,b, 在a中调用b.join(),相当于合并(join)成一个线程。将会使主调线程(即a)堵塞(暂停运行, 不占用CPU资源), 直到被调用线程运行结束或超时, 参数timeout是一个数值类型,表示超时时间,如果未提供该参数,那么主调线程将一直堵塞到被调线程结束。最常见的情况是在主线程中join所有的子线程。

等待:线程中执行wait()方法后,线程进入Waiting状态,等待其他线程的通知(notify)。wait方法释放内部所占用的琐,同时线程被挂起,直至接收到通知被唤醒或超时(如果提供了timeout参数的话)。当线程被唤醒并重新占有琐的时候,程序才会继续执行下去。

threading.Lock()不允许同一线程多次acquire(), 而Lock允许, 即多次出现acquire和release

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值