Python3 如何使用asyncio库在调用第三方模块(存在IO等待)的情况下实现协程?
问题描述
demo中有一个 task_check 的模块,底层是用urllib实现,请问如果要实现使用 asyncio 库实现协程操作,需要修改这个模块的底层代码吗?如何修改? 往大佬指点
问题出现的环境背景及自己尝试过哪些方法
平时都是使用 gevent 库和 monkey.patch_all() 实现协程,但发现 gevent 在调度时使用的是 DummyThread 进行操作,不知是否对性能有影响,如下图
所以想使用 asyncio 模块来实现协程, 但 asyncio 没有类似 monkey.patch_all() 这种模块来实现底层的替换, 翻阅了各类博文也没能理解, 望大佬们指点
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
demo 代码如下
python">import datetimeimport asyncio
class DEMO:
    def __init__(self):
        self.true_count = 0
        self.false_count = 0
    async def task(self):
        from module import task_check
        status = task_check.connect("131.114.2.134")["status"]
        if status:
            self.true_count+=1
        else:
            self.false_count += 1
        print(threading.currentThread().name,datetime.datetime.now(), "task is done, status is", status)
if __name__ == "__main__":
    start = datetime.datetime.now()
    demo = DEMO()
    task_count = 300
    # 批量添加asyncio协程
    tasks = [asyncio.ensure_future(demo.task()) for _ in range(task_count)]
    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.wait(tasks))
    # 反馈数据
    end = datetime.datetime.now()
    print("[+] runtime: %s available: %s %%" %(end - start, (demo.true_count / task_count) * 100))
你期待的结果是什么?实际看到的错误信息又是什么?
使用 asyncio 库调用第三方模块实现协程切换, 而非 aiohttp 这种已实现异步操作的模块.
以上是 Python3 如何使用asyncio库在调用第三方模块(存在IO等待)的情况下实现协程? 的全部内容, 来源链接: utcz.com/p/937779.html








