首页 > 系统相关 >python进程池的阻塞和非阻塞

python进程池的阻塞和非阻塞

时间:2023-08-20 16:44:30浏览次数:49  
标签:__ task name python 阻塞 进程 pool

进程池

概念:

当需要上百上千个目标时,手动创建进程工作量大,此时就可以用到multiprocessing模块中提供的pool方法。

初始化pool时,可以指定一个最大的进程数,当有新的请求提交到pool中时,如果pool还没有满,那么就会创造一个新的进程用于执行该请求。如果pool中的进程数满了,那么就需要等待,直到pool中有进程结束,才可以接着创造进程。

池子有两种类型:一种是阻塞式,一种是非阻塞式。
阻塞式:添加一个执行一个,执行一个才返回紧接着添加下一个。(没有特别大的意义)
非阻塞式:全部添加到队列中,立刻返回结果,并没有等待pool执行完毕,当执行完毕之后才可以调用回调函数。

进程池创建的进程和主进程是共同存在的关系,只有主进程存在,pool中的子进程才存在

方法:

apply_async():非阻塞,apply_async(func[, args=()[, kwds={}[, callback=None]]])

apply() :阻塞,apply(func, args=(), kwds={})

close() : 关闭进程池(pool),使其不在接受新的任务。

join() :主进程阻塞等待子进程的退出, join方法要在close或terminate之后使用。

terminal() : 结束工作进程,不在处理未处理的任务。

非阻塞示例:

import time
from multiprocessing import Pool
#非阻塞式
def task(task_name):
    print("开始做任务",task_name,os.getpid())
    time.sleep(3)
    print("任务结束")

if __name__ =="__main__":
    pool = Pool(3)			#设置pool容量为3
    list =["1","2","3",'4','5','6']
    for i in list:
        pool.apply_async(task,args=(i,))
    pool.close()
    pool.join()
    print("over")

结果:

开始做任务 1 21492
开始做任务 2 1508
开始做任务 3 11188
任务结束任务结束任务结束


开始做任务 4 11188
开始做任务 5 21492
开始做任务 6 1508
任务结束任务结束
任务结束

over

callback参数的使用方法

import time
from multiprocessing import Pool
#非阻塞式
def task(task_name):
    print("开始做任务",task_name,os.getpid())
    time.sleep(3)
    print("结束")
    return (task_name)
    
container = []
def callback_func(n):			#回调函数必须要有形参,形参用来接收返回值
    container.append(n)

if __name__ =="__main__":
    pool = Pool(5)
    list =["1","2","3",'4','5','6']
    for i in list:
        pool.apply_async(task,args(i,),callback=callback_func)
    pool.close()
    pool.join()
    print(container)

回调方法(callback)可以把函数返回的值进行调用,不过需要自行设置一个回调函数。

阻塞式

特点:

添加一个,执行一个进程,如果进程不结束,后面的进程就进不了pool。

示例:

import os
import time
from multiprocessing import Pool

def task(task_name):
    print("开始做任务",task_name,os.getpid())
    time.sleep(1)
    print("结束")
    print(task_name)
if __name__=="__main__":
    pool = Pool(2)
    list = ["1", "2", "3", '4', '5', '6']
    for i in list:
        pool.apply(task, args=(i,))
    pool.close()
    pool.join()

阻塞式没有回调函数

标签:__,task,name,python,阻塞,进程,pool
From: https://www.cnblogs.com/xjsrm/p/17644224.html

相关文章

  • python字符串的定义和表示及使用语法
    Python中字符串是由字符组成的不可变序列。字符串可以用单引号(')或双引号(")括起来表示。例如:s1='HelloWorld's2="PythonProgramming"Python还支持原始字符串,原始字符串以前缀r或R开头,可以包含转义字符但不会被解析。例如:s3=r'C:\Users\name\Documents'在字符串中可......
  • 「Python」第一阶段第七章笔记
    函数的多返回值"""函数的多返回值"""defmy_return():return1,2x,y=my_return()print(x,y,type(x),type(y))函数的多种传参方式"""函数的多种传参方式-位置-参数-缺省-不定长"""#位置传参形参实参位置对应defadd(a=0,b=0)......
  • 「Python」第一阶段第五章笔记
    函数的初体验"""函数的初体验"""name="OrzMiku"print(f"{name}这个名字有{len(name)}个字符长")函数的定义"""函数的定义def函数名(参数表):函数体return返回值"""defsayHello():print("HelloW......
  • 「Python」第一阶段第二章 笔记
    字面量#字面量:写在程序中固定的值print(114514)print(1919810)print("HelloWorld")注释"""Python中的多行注释"""print("多行注释用三个引号开头三个引号结尾")#Python中的单行注释print("单行注释以井号开头")变量"""变量名=变量值&......
  • 「Python」第一阶段第三章笔记
    布尔类型和比较运算符"""跳过"""if语句基本格式"""if语句基本格式if条件:代码块"""age=int(input("请输入你的年龄:"))ifage>=18:print("老东西速速爆金币!")quit()print("小东西给我磕一个!")......
  • 「Python」第一阶段第四章笔记
    while循环"""while条件:代码块"""num=255;#python没有++和--whilenum:print(num)num-=1for循环for基础语法"""for循环(感觉更像是一个foreach循环)for临时变量in序列类型:代码块"""name="OrzMiku......
  • python之multiprocessing模块的Process
    python之进程概述:python进程是程序中执行的程序,每个进程都有自己的地址空间。进程:资源分配的最小单位。线程:程序执行的最小单位。协程:协程完全由程序所控制在电脑程序中一般进程>线程>协程,进程中可以包含多个线程,线程中可以包含多个协程。在执行多进程或多线程的时候,当cpu有......
  • Python selenium 的日常使用示例
    importos.pathimporttimefromseleniumimportwebdriverfromselenium.webdriver.common.keysimportKeysfrombs4importBeautifulSoup#创建一个Firefox浏览器实例,需要提前下载好文件,设置好环境变量#Chrome:https://sites.google.com/a/chromium.org/chromed......
  • 「Python」第二阶段第一章笔记
    初识对象"""初识对象"""#1.设计一个类classStu:name=None#学生姓名gender=None#学生性别nationality=None#学生国籍native_place=None#学生籍贯age=None#学生年龄#2.创建一个对象stu_1=Stu()#3.对象属性进行赋......
  • python采集京东商品详情页面数据,京东API接口,京东h5st签名(2023.08.20)
    一、原理与分析1、目标页面https://item.jd.com/6515029.html  在chrome中打开,按f12键进入开发者模式,找到商品详情数据接口,如下:2、URL链接:https://api.m.jd.com/?appid=pc-item-soa&functionId=pc_detailpage_wareBusiness&client=pc&clientVersion=1.0.0&t=1692499380806&bod......