python执行cmd命令行异步执行_Python 异步调用命令行工具

本文介绍了在Python异步编程中如何使用`asyncio`和`subprocess`库执行CMD命令行任务,避免阻塞事件循环。通过示例展示了如何在异步环境下使用`wget`下载图片,并讲解了`asyncio.create_subprocess_exec`和`asyncio.create_subprocess_shell`的使用方法。
摘要由CSDN通过智能技术生成

当你在自己的 Python 程序中采用了基于事件循环的异步编程方法之后,你就会发现自己不自觉地被其牢牢吸引住,并不是说这一方法多么棒,而是因为你不得不想办法保证程序中的任意环节都不能是阻塞的!

例如当前的场景是希望从 MongoDB 中读取每一条未处理过的数据,下载并保存其中的图片信息,然后更新数据库的内容。Python 常用的 MongoDB 异步驱动是 Motor :

结合 asyncio 使用方法如下:

importmotor.motor_asyncio

importasyncio

client = motor.motor_asyncio.AsyncIOMotorClient()

db = client.test_database

asyncdefrun():

asyncfor mmin db.test_database.find({"status": 0}):

print(mm['img_src'])

# Download Image Here

# dl_img(mm['img_src'])

awaitdb.test_database.update({"_id": mm['_id']}, {"$set": {"status":1}})

loop = asyncio.get_event_loop()

loop.run_until_complete(run())

此时如果 dl_img() 处的操作是阻塞的,那么异步处理就没有意义了。当然这里依然可以借助异步网络请求库 aiohttp 来实现图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值