sxfxtf 发表于 2022-11-13 21:01

Python 异步直接调用普通函数疑问

先给各位大佬们献上膝盖.
需求描述,用异步模式调用psutil模块获取主机的CPU和内存使用率.
功能已经完成.上代码和截图


import asyncio
import psutil
from concurrent.futures.thread import ThreadPoolExecutor

def get_cpu_use():
    ret= psutil.cpu_percent(1)
    return ret


def get_mem_use():
    ret= psutil.virtual_memory().percent
    # print(ret, type(ret))
    return ret


async def main2(obj):
    obj=asyncio.get_event_loop()
    flag=1
    while flag:
      cpu_task = obj.run_in_executor(pool, get_cpu_use)
      mem_task = obj.run_in_executor(pool, get_mem_use)
      ret=await asyncio.gather(cpu_task,mem_task)
      print("当前cpu使用率%s,内存使用率%s"%(ret,ret))
      await asyncio.sleep(1)

pool=ThreadPoolExecutor(max_workers=1)
obj=asyncio.get_event_loop()
obj.run_until_complete(main2(obj))

运行结果如下:



我想请教的是因为psutil模块不支持异步.所以如果要调用就用到了 obj.run_in_executor方法.
有没有其他写法,可以不用这个方法也实现对普通函数的调用,或者直接将普通函数封装成协程函数的????

waahah 发表于 2022-11-28 16:30

如果仅仅将涉及psutil操作的代码封装到async修饰的普通函数里是不可行的。只有使用支持异步操作的方式才可以实现真正的异步

sxfxtf 发表于 2022-12-7 18:11

waahah 发表于 2022-11-28 16:30
如果仅仅将涉及psutil操作的代码封装到async修饰的普通函数里是不可行的。只有使用支持异步操作的方式才可 ...

恩 谢谢指点
页: [1]
查看完整版本: Python 异步直接调用普通函数疑问