首页 > 系统相关 >Python多进程使用案例

Python多进程使用案例

时间:2023-07-21 13:11:29浏览次数:29  
标签:__ Process name Python put Queue 案例 进程

Python多进程使用案例

为什么推荐多进程?

由于python解释器GIL锁的存在,python中的多线程并不是真的多线程,事实上是在一个cpu内核上运行的,无法调用电脑的多核性能,就出现了一个人干活,剩下几个人在旁边围观的经典场景。那么为了更好的提升性能,在一定情况下是推荐使用多进程模式实现功能的。但是在python多进程中我们需要注意一个事情是,由于每个进程的资源相互独立,那么我们应该尽量避免共享资源。

多进程间通信

由于目前的场景仅使用到Queue队列,所以以下示例都是在队列情况下进行的。

Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递,同时相比较Pipe来说,Queue允许多个进程同时往队列中put数据,而Pipe的数据流动是单向的,比较适用于一对生产者消费者的场景下。put方法用于插入数据到队列中,put方法还有两个可选参数:blocked和timeout。如果blocked为True(默认值),并且timeout是正值,该方法会阻塞timeout指定的时间,直到该队列有剩余的空间。如果超时,则会抛出Queue Full 异常。如果blocked为False,那么如果该队列已满,会立刻抛出Queue Full异常。

get方法用于从队列中取出一个元素,同时类似put方法,get也有两个可选参数:blocked和timeout,作用效果和put的类似,就不详细展开了,这两个参数一般情况下都是用不到的。

多进程挂起

在有的多进程中需要临时挂起一个子进程,可以使用以下方法实现。

from multiprocessing import Process
import psutil
import time

def getter("name"):
  while True:
  	print(f"Process {name} is running")
    time.sleep(1)
if __name__ == "__main__":
  p = Process(target=getter, args=("getter", ))
  p.start()
  pid = p.pid 	# 获取进程id
  proc = psutil.Process(pid)	
  proc.suspend()	# 挂起进程
  time.sleep(3)
  prop.resume()	# 恢复进程

代码示例

from multiprocessing import Process, Queue
import psutil
import time
import random

def getter("name", q):
  print(f"Process {name} is running")
  while True:
    raw_data = q.get()
    print('get', raw_data)
def putter("name", q):
  print(f"Process {name} is running")
  while True:
    raw_data = random.random()
    q.put(raw_data)
    time.sleep(1)
    
if __name__ == "__main__":
  q = Queue()
  get_p = Process(target=getter, args=("getter", q, ))
  put_p = Process(target=putter, args=("putter", q, ))
  get_p.start()
  put_p.start()

标签:__,Process,name,Python,put,Queue,案例,进程
From: https://www.cnblogs.com/cnpolaris/p/17571030.html

相关文章

  • python之地图类信息爬取
    importrequestsimportbs4importMysqlimporttimeimportpymysqldb=pymysql.connect(host="localhost",port=3306,user='root',password='Njx200259',db="sjz_kg")update=db.cursor()head={"User-Agent&q......
  • python电影推荐
    Python电影推荐在当今数字化的时代,人们越来越倾向于使用智能推荐系统来寻找他们感兴趣的电影。Python作为一种流行的编程语言,提供了强大的工具和库,可以帮助我们构建出色的电影推荐系统。本文将介绍如何使用Python来创建一个简单的电影推荐系统,并提供一些用于推荐算法的示例代码。......
  • pythonETL案例
    PythonETL案例的实现流程ETL(Extract,Transform,Load)是指从数据源抽取数据,对数据进行转换,然后将数据加载到目标数据库或数据仓库中的一种常见数据处理过程。在本篇文章中,我将教会你如何使用Python实现一个简单的ETL案例。一、整体流程下面是整个ETL案例的流程,我们将按照以下步......
  • python点击图片查看像素
    Python点击图片查看像素在计算机视觉和图像处理领域,我们经常需要获取一张图片的像素信息。通过Python编程语言,我们可以轻松地读取和处理图像,以及查看图像的像素信息。本篇文章将介绍如何使用Python点击图片来查看像素,并提供相应的代码示例。准备工作在开始之前,我们需要先安装Pyt......
  • python3字典添加键值对
    如何在Python3中添加字典键值对概述在Python中,字典(Dictionary)是一种非常有用的数据结构,它可以存储键值对。如果你刚入行并且不知道如何在Python3中添加字典键值对,不用担心!本文将指导你完成这个任务。步骤概览下面是完成这个任务的步骤概览:步骤描述1创建一个空字典......
  • python点击提交按钮弹出确定提交对话框,如果点击确定,则弹出考试结果对话框(需要
    Python点击提交按钮弹出确定提交对话框,如果点击确定,则弹出考试结果对话框在开发Web应用程序时,经常需要与用户进行交互,其中一种常见的交互方式是通过弹出对话框来获取用户的确认或显示相关信息。本文将介绍如何使用Python实现点击提交按钮弹出确定提交对话框,并在点击确定后弹出考试......
  • python3正则表达式分组替换
    Python3正则表达式分组替换在Python中,使用正则表达式进行字符串处理是一项非常强大和灵活的技术。正则表达式可以用来匹配、查找和替换字符串中的模式。其中,分组替换是一种常用的技术,它允许我们将正则表达式的匹配结果以分组的形式进行替换。本文将介绍如何在Python3中使用正则表......
  • python的可视化工具
    Python的可视化工具Python是一种强大的编程语言,拥有丰富的可视化工具,可以帮助开发者以更直观、美观的方式展示数据。在本文中,我们将介绍一些常用的Python可视化工具,并提供相应的代码示例。MatplotlibMatplotlib是Python中最常用的可视化库之一,它提供了各种绘图功能,包括线图、散......
  • python的逗号怎么打
    项目方案:Python逗号打印工具1.简介本项目旨在开发一个简单易用的Python逗号打印工具,帮助用户快速生成带有逗号的字符串。通常,在对数据进行处理和展示时,我们经常需要将一组数据以逗号分隔的形式打印出来,这个工具可以方便地解决这个问题。2.功能需求用户可以输入任意数量的字......
  • python3在线编译器
    Python3在线编译器实现介绍在本文中,我将向你展示如何使用Python3来实现一个简单的在线编译器。在线编译器允许用户在浏览器中输入Python3代码,并立即执行并查看结果。我们将使用Flask框架来搭建Web应用程序,其中包含一个页面用于输入和显示代码,并使用Python的exec()函......