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方法.
有没有其他写法,可以不用这个方法也实现对普通函数的调用,或者直接将普通函数封装成协程函数的???? 如果仅仅将涉及psutil操作的代码封装到async修饰的普通函数里是不可行的。只有使用支持异步操作的方式才可以实现真正的异步 waahah 发表于 2022-11-28 16:30
如果仅仅将涉及psutil操作的代码封装到async修饰的普通函数里是不可行的。只有使用支持异步操作的方式才可 ...
恩 谢谢指点
页:
[1]