广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python之多线程与多进程
  • 480
分享到

python之多线程与多进程

之多线程进程 2023-01-31 00:01:59 480人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

1. 多进程与多线程 (1)背景:为何需要多进程或者多线程:在同一时间里,同一个计算机系统中如果允许两个或者两个以上的进程处于运行状态,这便是多任务。多任务会带来的好处例如用户边听歌、边上网、边打印,而这些任务之间丝毫不会互相干扰。使用多

1. 多进程与多线程

(1)背景:为何需要多进程或者多线程
在同一时间里,同一个计算机系统中如果允许两个或者两个以上的进程处于运行状态,这便是多任务。多任务会带来的好处例如用户边听歌、边上网、边打印,而这些任务之间丝毫不会互相干扰。使用多进程技术,可大大提高计算机的运算速率。

(2)多进程与多线程的区别:

进程:程序在计算机上的一次执行活动。进程分为:系统进程和用户进程。

当运行一个程序时,实际就是启动了一个进程。程序是死的(静态的),进程是活的(动态的)。

线程:是程序中的一个单一的顺序控制流程。

进程是一个相互独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单元(指运行中程序的调度单位)。

区别:进程是资源分配的最小单位,线程是CPU调度的最小单位。

线程是一个进程的实体,是由表示程序运行状态的寄存器(如程序计数器、栈指针)以及堆栈组成,它是比进程更小的单位。

线程是程序中的一个执行流。一个执行流是由CPU运行程序代码并操作程序的数据所形成的。因此,线程被认为是以CPU为主体的行为。

线程不包含进程地址空间中的代码和数据,线程是计算过程在某一时刻的状态。所以,系统在产生一个线程或各个线程之间切换时,负担要比进程小得多。

线程是一个用户级的实体,线程结构驻留在用户空间中,能够被普通的用户级函数直接访问。

一个线程本身不是程序,它必须运行于一个程序(进程)之中。因此,线程可以定义为一个程序中的单个执行流。

多线程是指一个程序中包含多个执行流,多线程是实现并发的一种有效手段。一个进程在其执行过程中,可以产生多个线程,形成多个执行流。每个执行流即每个线程也有它自身的产生、存在和消亡的过程。

多线程程序设计的含义就是可以将程序任务分成几个并行的子任务。

                                                               

windows系统中,进行CPU分配是以线程为单位的,一个进程可能由多个线程组成,这种情况更加复杂,有如下关系:

总线程数<=CPU数量,并行运行

总线程数>CPU数量,并发运行。         并行运行的效率明显高于并发运行。

 

 2. 多进程编程

  • 进程的概念

第一,进程是一个实体,每一个进程都有它自己的地址空间,一般情况下,包括文本区域、数据区域和堆栈区域。

文本区域:存储处理器执行的代码;

数据区域:存储变量和进程执行期间使用的动态分配的内存.

堆栈区域:存储着活动过程中调用的指令和本地变量。

第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,称其为进程。

  •  进程的特征

动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生、动态消亡的;

并发性:任何进程都可以同其他进程一起并发执行。

独立性:进程是一个能够独立运行的基本单元,同时也是系统分配资源和调度的独立单元;

异步性:进程间的相互制约,使得进程具有执行的间断性。

结构特征:进程由程序、数据、进程控制块三部分组成。

 

多个不同进程可以包含相同的程序:一个程序在不同数据集里就构成不同的进程,能得到不同的结果,但是在执行过程中,程序不能发生变化。

  • 进程的状态:

就绪状态:进程已经获得除处理器外所需资源,等待分配处理器资源,只要分配了处理器进程就可执行;

运行状态:进程占用处理器资源、处于此状态的进程数目小于或者等于处理器的数目;阻塞状态:由于进程等待某种条件,在条件满足之前无法继续执行。

  1. Miltiprocessing(多进程):

Multiprocessing是python提供的非常好用的多进程包,用户只需要简单的定义一个函数,

Python就会自动地完成其他的所有事情。它支持子进程、进程间通信、数据共享、不同形式的同步,提供了包括Process、Queue、Pipe、Lock在内的各种组件。合理运用这些组件,可以轻松地完成单进程到并发执行的转换。

        创建进程Process模块:

class multiprocessing.Process(group=None,target=None,name=None,args=(),kwargs={})

其中,group为None,它的存在是为了兼容threading.Thread,target表示调用对象,name为别名,args表示调用对象的位置参数元组,kwargs表示调用对象的字典。

例如:创建函数并将其作为多个进程

import multiprocessing

import time

 

def worker_1(interval):

    print("worker_1")

    time.sleep(interval)

    print("end worker_1")

    

def worker_2(interval):

    print("worker_2")

    time.sleep(interval)

    print("end worker_2")

    

def worker_3(interval):

    print("worker_3")

    time.sleep(interval)

    print("end worker_3")

    

if __name__=='__main__':

    p1=multiprocessing.Process(target=worker_1,args=(2,))

    p2=multiprocessing.Process(target=worker_2,args=(3,))

    p3=multiprocessing.Process(target=worker_3,args=(4,))

    

    p1.start()

    p2.start()

    p3.start()

    

    print("The number of CPU is:"+str(multiprocessing.cpu_count()))

    for p in multiprocessing.active_children():

        print("child p.name:"+p.name+"\tp.id"+str(p.pid))

#运行结果:

The number of CPU is:4

child p.name:Process-2  p.id9804

child p.name:Process-1  p.id9172

child p.name:Process-3  p.id6608

 

注释#:上述代码中使用multiprocessing.cpu_count()函数查看当前计算机的CPU数量,并通过语句multiprocessing.active_children()和for()循环的结合使用,能够清楚地查看当前活动的进程数。运行结果以worker_1、2、3的顺序输出,说明这三个进程间是并发执行的,所以每次开始时的输出顺序可能有所不同。

 

  • 守护进程Daemon
  • 进程间通信技术Queue通信和Pipe管道(用到之时再补充,不太懂--Python程序设计实用教程--杨连贺)

--结束END--

本文标题: python之多线程与多进程

本文链接: https://www.lsjlt.com/news/182236.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python之多线程与多进程
    1. 多进程与多线程 (1)背景:为何需要多进程或者多线程:在同一时间里,同一个计算机系统中如果允许两个或者两个以上的进程处于运行状态,这便是多任务。多任务会带来的好处例如用户边听歌、边上网、边打印,而这些任务之间丝毫不会互相干扰。使用多...
    99+
    2023-01-31
    之多 线程 进程
  • Python 多进程开发与多线程开发
    我们先来了解什么是进程?程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。在多道...
    99+
    2023-01-31
    多线程 进程 Python
  • python 多线程与多进程效率测试
    目录1、概述2、代码练习3、运行结果1、概述 在Python中,计算密集型任务适用于多进程,IO密集型任务适用于多线程 正常来讲,多线程要比多进程效率更高,因为进程间的切换需要的资...
    99+
    2022-11-12
  • 第十五章 Python多进程与多线程
    15.1 multiprocessingmultiprocessing是多进程模块,多进程提供了任务并发性,能充分利用多核处理器。避免了GIL(全局解释锁)对资源的影响。有以下常用类:类描述Process(group=None, targe...
    99+
    2023-01-31
    十五章 多线程 进程
  • python面试题之python多线程与
    多线程可以共享全局变量,多进程不能 多线程中,所有子线程的进程号相同,多进程中,不同的子进程进程号不同   线程共享内存空间;进程的内存是独立的 同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现 创建新线程...
    99+
    2023-01-31
    多线程 面试题 python
  • python之多线程
    一、threading 模块 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二、开启线程的两种方式 from threading import Thread import ti...
    99+
    2023-01-30
    之多 线程 python
  • python多线程与多进程--存活主机p
    python多线程与多进程 多线程: 案例:扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活) 普通版本:   #扫描给定网络中存活的主机(通过ping来测试,有响应则说明主机存活)import sys import ...
    99+
    2023-01-30
    多线程 进程 主机
  • python中多进程与多线程有什么区别
    python中多进程与多线程有什么区别?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、lo...
    99+
    2023-06-14
  • Python多线程与多进程相关知识总结
    目录一、什么是进程二、什么是线程三、并发、并行3.1 并发3.2 并行四、多线程适用场景五、Python GIL六、Python多线程、多进程实例:CPU 密集型任务6.1 单线程6...
    99+
    2022-11-12
  • 分析详解python多线程与多进程区别
    目录1 基础知识1.1 线程1.2 进程1.3 两者的区别2 Python 多进程2.1 创建多进程方法1:直接使用Process方法2:继承Process来自定义进程类,重写run...
    99+
    2022-11-12
  • python socket多线程和多进程
    在socket中,如果直接创建的话,是只能接受一个用户的请求需要实现socketserver中的handle方法,可以实现多进程并发访问 SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理...
    99+
    2023-01-31
    多线程 进程 python
  • python多线程和多进程(二)
    ---恢复内容开始--- 一、多进程   1、multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。 import time from mult...
    99+
    2023-01-30
    多线程 进程 python
  • python之多进程
    一、multiprocessing模块 python中的多线程无法利用多核优势,如果想要充分地使用多核cpu的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。python提供了multiprocessi...
    99+
    2023-01-30
    之多 进程 python
  • Python控制多进程与多线程并发数总结
    一、前言 本来写了脚本用于暴力破解密码,可是1秒钟尝试一个密码2220000个密码我的天,想用多线程可是只会一个for全开,难道开2220000个线程吗?只好学习控制线程数了,官方文档不好看,觉得结构不够...
    99+
    2022-06-04
    多线程 进程 Python
  • Java之多线程进阶
    目录 一.上节内容复习 1.线程池的实现 2.自定义一个线程池,构造方法的参数及含义 3.线程池的工作原理 4.拒绝策略 5.为什么不推荐系统提供的线程池 二.常见的锁策略 1.乐观锁和悲观锁 2.轻量级锁和重量级锁 3.读写锁和普通互斥...
    99+
    2023-08-31
    java jvm 开发语言 javaee 多线程
  • python多进程和多线程介绍
    目录一、什么是进程和线程 二、多进程和多线程 三、python中的多进程和多线程1、多进程2、多线程一、什么是进程和线程  进程是分配资源的最小单位,线...
    99+
    2022-11-10
  • Python 多线程及进程
    threading使用 (工业风案例) import threading from time import sleep, ctime loop = [4, 2] class ThreadFunc: def __init_...
    99+
    2023-01-30
    多线程 进程 Python
  • python 包之 threading 多线程
    目录一、创建一个线程二、创建多个线程三、线程同步四、递归锁五、信号锁一、创建一个线程 通过实例化threading.Thread类创建线程 import threading def...
    99+
    2022-11-13
  • python——多进程、线程、携程
    http://mp.weixin.qq.com/splg_nld=1&plg_usr=1&scene=23&mid=2652078313&plg_vkey=1&__biz=MzI2NjA3NTc4Ng...
    99+
    2023-01-31
    线程 携程 进程
  • python并发编程之多进程、多线程、异步和协程详解
    最近学习python并发,于是对多进程、多线程、异步和协程做了个总结。 一、多线程 多线程就是允许一个进程内存在多个控制权,以便让多个函数同时处于激活状态,从而让多个函数的操作同时运行。即使是单CPU的计...
    99+
    2022-06-04
    之多 多线程 详解
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作