python异步执行带参数异步执行方法

在这个示例中,我们使用了 functools.partial 来创建一个带有参数的部分函数 partial_blocking_function2,然后将这个部分函数传递给 loop.run_in_executor() 方法。接着,我们使用 asyncio.gather() 来等待两个任务的完成。

通过这种方式,你可以调用带有参数的函数,并在 asyncio 中实现在新线程中执行多个耗时操作,同时不阻塞后续代码的执行。

带参数的异步执行方法:

import asyncio
import time
import functools

def blocking_function():
    # 模拟耗时操作
    
    time.sleep(2)
    print('---------------blocking_function exeute-------------------')
    return "Blocking function is done"


def blocking_function2(msg):
    # 模拟耗时操作
    
    time.sleep(2)
    print('---------------blocking_function2 exeute-------------------'+msg)
    return "Blocking function is done"

async def main():
    loop = asyncio.get_running_loop()
    task = loop.run_in_executor(None, blocking_function)

    #带参数的blocking_function2方法
    partial_blocking_function2 = functools.partial(blocking_function2, " with message")
    task2 = loop.run_in_executor(None, partial_blocking_function2)
    
    # 继续执行后续的代码逻辑
    print("This line will be executed immediately after run_in_executor")
    
    time.sleep(50)
    #result = await task
    #print(result)

asyncio.run(main())

两个参数的: 

import asyncio
import time
import functools

def blocking_function():
    # 模拟耗时操作
    
    time.sleep(2)
    print('---------------blocking_function exeute-------------------')
    return "Blocking function is done"


def blocking_function2(msg):
    # 模拟耗时操作
    
    time.sleep(2)
    print('---------------blocking_function2 exeute-------------------'+msg)
    return "Blocking function is done"

def blocking_function3(msg,ss):
    # 模拟耗时操作
    
    time.sleep(2)
    print(ss+'---------------blocking_function3 exeute-------------------'+msg)
    return "Blocking function is done"



async def main():
    loop = asyncio.get_running_loop()
    task = loop.run_in_executor(None, blocking_function)

    #带参数的blocking_function2方法
    partial_blocking_function2 = functools.partial(blocking_function2, " with message")
    task2 = loop.run_in_executor(None, partial_blocking_function2)

    partial_blocking_function3 = functools.partial(blocking_function3, " with message",'33333')
    task3 = loop.run_in_executor(None, partial_blocking_function3)
    
    # 继续执行后续的代码逻辑
    print("This line will be executed immediately after run_in_executor")
    
    time.sleep(50)
    #result = await task
    #print(result)

asyncio.run(main())

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章