学习asyncio模块之functools模块中partial的使用

一、基本解释

from functools import partial

"""
典型的,函数在执行时,要带上所有必要的参数进行调用。然后,有时参数可以在函数被调用之前提前获知。
这种情况下,一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用。
本质是实现了__call__方法,使实例对象可以+()的方式被调用

一般用于回调函数,因为异步中回调函数一般不让传参,如进程池的回调函数,默认第一个参数为子进程返回的结果
如果我们想传一个参数与子进程返回的结果交互,原先那种就不行,而使用partial就可以的
"""


def add(x, y):
    return x + y


push = partial(add, 1)  # 返回一个可被调用的对象,1 默认传给函数的位置参数x
print(push)  # functools.partial(<function add at 0x0000018A6F9D0040>, 1)

# 当想计算1+2时,可以如下操作
ret = push(2)  # 3

二、进程池回调使用


import os
from multiprocessing import Pool


def call_back(child_result, s):
    print(child_result + s)
    return child_result + s


def task(x, y):
    return x + y


if __name__ == '__main__':
    pool = Pool(os.cpu_count())
    jobs = range(100)
    Max = 10000
    for index, v in enumerate(jobs):
        pool.apply_async(func=task, args=(index, v), callback=partial(call_back, 10000))
    pool.close()
    pool.join()
posted @ 2021-03-16 14:46  Alive_2020  阅读(236)  评论(0编辑  收藏  举报