吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 799|回复: 2
收起左侧

[求助] Python 异步直接调用普通函数疑问

[复制链接]
sxfxtf 发表于 2022-11-13 21:01
先给各位大佬们献上膝盖.
需求描述,用异步模式调用psutil模块获取主机的CPU和内存使用率.
功能已经完成.上代码和截图


[Python] 纯文本查看 复制代码
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[0],ret[1]))
        await asyncio.sleep(1)

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


运行结果如下:
image.png


我想请教的是因为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修饰的普通函数里是不可行的。只有使用支持异步操作的方式才可 ...

恩 谢谢指点
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 04:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表