进程 线程 threading模块

# 进程:本质上就是一个程序在一个数据集上的一次动态执行过程(抽象的概念)
# 进程一般由程序、数据集(程序运行过程中所需要使用的资源)、进程控制块(记录进程的外部特征,描述进程的执行变化过程)三部分组成
# 进程是最小的资源单位

# 线程的出现是为了降低上下文切换的消耗,提高系统的并发性,并突破一个进程只能干一样事的缺陷,使到进程内并发成为可能# 线程:是最小的执行单位

# 进程与线程的联系与区别
# 1、一个程序至少有一个进程,一个进程至少有一个线程 (进程可以理解成线程的容器)
# 2、进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
# 3、线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制、
# 4、进程是具有一定独立功能的程序关于某个数据集上的一次运行活动,里程是系统进行资源分配和调度的一个独立单位
# 5、线程是进程的一个实体,是cpu调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,线程自己基本不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈)但是它可与同属一个进程的其它线程共享进程所拥有的全部资源
# 6、一个线线可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行

# threading线程模块

import threading, time

def hi(num):
    print(‘hello world,‘, num)
    time.sleep(3)

class MyThread(threading.Thread):  # 自定义线程类
    def __init__(self, num):  # 初始化,获取num
        self.num = num

    def run(self):  # 将hi函数体写入run()方法内,必须要重写run方法
        print(‘hello world,‘, self.num)
        time.sleep(3)

if __name__ == ‘__main__‘:
    t1 = threading.Thread(target=hi, args=(10,))  # 创建了一个线程对象,目标指向hi函数,args后是元组形式的参数
    t2 = threading.Thread(target=hi, args=(9,))
    t3 = MyThread(8)    # 通过自定义的线程类创建t3线程对象,这种方式不常用

    t1.start()  # 启动t1线程
    t1.join()  # 在t1子线程完成之前,这个子线程的父线程将一直被阻塞

    t2.setDaemon(True)  # setDaemon(守护线程) 必须在start之前设置
    # 当我们在程序运行中,执行一个主线程,如果主线程又创建一个子线程,主线程和子线程就兵分两路分别运行
    # 那么当主线程完成想退出时,会检验子线程是否完成。如果子线程未完成,则主线程会等子线程完成后再退出
    # 但有时候我们需要的是,只要主线程完成了,不管子线程是否完成,都要和主线程一起退出,这时就可以使用setDaemon方法了
    t2.start()
    print(t1.getName())  # Thread-1
    print(threading.active_count())  # 2
    print(threading.enumerate())  # [<_MainThread(MainThread, started 3672)>, <Thread(Thread-2, started daemon 11632)>]
    print(‘end...‘)

# threading的其它方法
# run() 用以表示线程活动的方法
# start() 启动线程活动
# isAlive() 返回线程是否活动的
# getName() 返回线程名
# setName() 设置线程名

# threading模块提供的一些方法
# threading.currentThread() 返回当前的线程变量
# threading.enumerate() 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程
# threading.activeCount() 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果

原文地址:https://www.cnblogs.com/dangrui0725/p/9495851.html

时间: 2024-10-07 01:02:33

进程 线程 threading模块的相关文章

线程 threading模块

线程 什么是线程 线程是计算机中被cpu调度的最小单位 cpu都是执行的线程中的代码 线程被包含在进程中 ,是进程的实际运作单位 60年代,在OS中能拥有资源和独立运行的基本单位是进程,然而随着计算机技术的发展,进程出现了很多弊端,一是由于进程是资源拥有者,创建.撤消与切换存在较大的时空开销,因此需要引入轻型进程:二是由于对称多处理机(SMP)出现,可以满足多个运行单位,而多个进程并行开销过大. 因此在80年代,出现了能独立运行的基本单位——线程(Threads). 注意:进程是资源分配的最小单

python 线程 threading模块

# 进程 : 数据隔离,资源分配的最小单位,可以利用多核,操作系统调度,数据不安全,开启关闭切换时间开销大 # multiprocessing 如何开启进程 start join # 进程有数据不安全的问题 Lock (抢票的例子) # 进程之间可以通信ipc: # 队列(安全) 管道(不安全) # 生产者消费者模型 # 第三方工具 # 进程之间可以通过Manager类实现数据共享(不需要会写代码) # 一般情况下我们开启的进程数不会超过cpu个数的两倍# 线程(80%) # 什么是线程 :能被

python多线程与threading模块

python多线程与_thread模块 中介绍了线程的基本概念以及_thread模块的简单示例.然而,_thread模块过于简单,使得我们无法用它来准确地控制线程,本文介绍threading模块,它提供了更强大的多线程管理方案. threading模块的对象 Thread 表示一个执行线程的对象 Lock 锁原语 RLock 可重入锁对象,使单一线程可以再次获得已持有的锁(递归锁) Condition 条件变量对象,使得一个线程等待另一个线程满足特定条件 Event 条件变量的通用版本,任意数量

Python:线程、进程与协程(2)——threading模块(1)

上一篇博文介绍了Python中线程.进程与协程的基本概念,通过这几天的学习总结,下面来讲讲Python的threading模块.首先来看看threading模块有哪些方法和类吧. 主要有: Thread :线程类,这是用的最多的一个类,可以指定线程函数执行或者继承自它都可以实现子线程功能. Timer:与Thread类似,但要等待一段时间后才开始运行,是Thread的子类. Lock :原锁,是一个同步原语,当它锁住时不归某个特定的线程所有,这个可以对全局变量互斥时使用. RLock :可重入锁

第36篇 多进程的数据共享,进程池的回调函数,线程 什么是GIL锁,Threading模块记

内容概览: 进程 数据共享 进程池--回调函数 线程 线程的基础理论 什么是线程? 线程与进程的关系 GIL锁 线程的开启: Threading模块1,用多进程开启socket创建聊天 server端写了input函数会报错?因为服务器是高速运行的,自动化的为来访问的客户端提供服务, 不可能停下来等待管理员的输入,然后发送给客户.这就失去了自动化的意义. 2,进程池Pool()方法创建的进程,map()方法是否有返回值? p.map()得到的是迭代对象 import time from mult

# 进程/线程/协程 # IO:同步/异步/阻塞/非阻塞 # greenlet gevent # 事件驱动与异步IO # Select\Poll\Epoll异步IO 以及selectors模块 # Python队列/RabbitMQ队列

1 # 进程/线程/协程 2 # IO:同步/异步/阻塞/非阻塞 3 # greenlet gevent 4 # 事件驱动与异步IO 5 # Select\Poll\Epoll异步IO 以及selectors模块 6 # Python队列/RabbitMQ队列 7 8 ############################################################################################## 9 1.什么是进程?进程和程序之间有什么

Python-Day9 Paramiko模块/进程/线程/RabbitMQ队列

一.Paramiko模块 1.Paramiko安装 Python的目录下有个Scripts目录,cd到这个目录用这里面的pip命令(如果添加的环境变量可以在cmd直接输入命令):pip install paramiko.如果pip版本低会有提示,python -m pip install --upgrade pip 升级pip,再次输入pip install paramiko. 2.SSHClient 用于连接远程服务器并执行基本命令 #基于用户名密码连接:import paramiko # 创

python全栈开发基础【第二十四篇】(利用threading模块开线程、join与守护线程、GIL与Lock)

一多线程的概念介绍 threading模块介绍 threading模块和multiprocessing模块在使用层面,有很大的相似性. 二.开启多线程的两种方式 创建线程的开销比创建进程的开销小,因而创建线程的速度快. #开启进程的第一种方式 from multiprocessing import Process from threading import Thread import os import time def work(): print('<%s> is running'%os.g

利用threading模块开线程

一多线程的概念介绍 threading模块介绍 threading模块和multiprocessing模块在使用层面,有很大的相似性. 二.开启多线程的两种方式 1 1.创建线程的开销比创建进程的开销小,因而创建线程的速度快 2 from multiprocessing import Process 3 from threading import Thread 4 import os 5 import time 6 def work(): 7 print('<%s> is running'%o