V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  fzzff  ›  全部回复第 2 页 / 共 7 页
回复总数  122
1  2  3  4  5  6  7  
274 天前
回复了 ohayoo 创建的主题 Python 请大佬帮忙瞄一眼我这个丑陋的异步协程代码
以下是对代码进行优化的建议:

1. 使用异步文件读取:可以使用`aiofiles`库来实现异步文件读取,从而避免阻塞事件循环。这将使得文件的读取操作也能并发进行,提高效率。

2. 使用异步上下文管理器:`aiohttp`支持异步上下文管理器,你可以使用`async with`语法来创建`ClientSession`,这样会更加简洁,而且会在任务完成后自动关闭会话。

3. 使用`asyncio.as_completed`:在并发执行任务时,可以使用`asyncio.as_completed`来获取已完成的任务,而不是等待所有任务都完成再处理结果。这样可以更早地得到一部分结果,并在需要时立即处理。

4. 异常处理:对于异步代码,异常处理十分重要。可以在任务执行时捕获异常,并记录错误信息,以便后续分析和处理。

下面是优化后的代码:

```python
import asyncio
import aiofiles
from aiohttp import ClientSession

async def delete_file(session: ClientSession, sem: asyncio.Semaphore, uri: str):
headers = {'Authorization': 'xxxxxxxxxxx'}
url = api + uri
try:
async with sem:
async with session.delete(url, headers=headers) as response:
return uri, response.status
except Exception as e:
# 处理异常,比如记录错误日志
print(f"Error occurred while processing {uri}: {str(e)}")
return uri, None

async def main(uris):
sem = asyncio.Semaphore(100)
async with ClientSession() as session:
tasks = [delete_file(session, sem, uri) for uri in uris]
for future in asyncio.as_completed(tasks):
uri, status = await future
if status is not None:
print(f"{uri}: {status}")
else:
print(f"{uri}: Error")

async def read_uris(filename):
async with aiofiles.open(filename, mode='r') as fp:
async for line in fp:
yield line.strip()

if __name__ == '__main__':
asyncio.run(main(read_uris("uris.txt")))
```

在优化后的代码中,我们使用`aiofiles`库来异步读取文件,并使用`async for`来逐行获取 URI 。同时,我们使用`asyncio.as_completed`来处理已完成的任务,这样在某些任务执行较慢时,可以更早地输出结果,提高实时性。另外,我们在`delete_file`函数中增加了异常处理,确保在出现异常时不会导致整个任务中断。
2022-12-30 15:48:24 +08:00
回复了 sevenandeleven 创建的主题 Python flask + nginx + uwsgi +docker-compose
docker-compose.yml 的目录层级放哪了, 是不是 build 指定路径不对找不到对应的 Dockerfile
@veoco 感谢回复, 我测试了一下你说的这种方式, 还是报相同的错误, 因为是把另一个项目的用 asyncio 实现的异步爬虫代码移植到一个 django 项目作为 celery 任务, django 项目的 celery 启动用是用的 gevent 模式所以触发了这个错误, 目前已经解决, 把数据库写入部分改成了使用 aiomysql 操作
2022-10-19 16:33:59 +08:00
回复了 911061873 创建的主题 Python 类继承及调用问题
简单工厂设计模式
2022-08-10 17:30:49 +08:00
回复了 sunmoon1983 创建的主题 MySQL 求一个数据表设计的思路!
这个类似的需求我也遇到过, 因为涉及的逻辑比较多所以没有动原表存的 json 字段, 增加了个一对多的表专门用来查询
2022-08-10 14:11:07 +08:00
回复了 cs419 创建的主题 Android 华为 p40 锁了,能解吗
华为账号被锁之前机主肯定联系过你室友吧, 即便没联系过, 这种手机也别去买, 占这便宜干啥呢?
2022-08-09 17:41:55 +08:00
回复了 cs419 创建的主题 Android 华为 p40 锁了,能解吗
不还给原机主?
2022-08-05 11:22:54 +08:00
回复了 fzzff 创建的主题 程序员 docker-compose down 后 mysql 丢失部分数据, 数据也挂载到了宿主机
更新下, 最终找到了数据丢失的原因, 比较奇葩...项目本身在 /home/srv 下但是有其他同事将项目整体移动到了 /data/home/srv 下, 但是此时运行中的容器挂载的目录绝对路径还是 /home/srv, 所以在同事移动项目到 down 容器之间的时间修改添加的数据都被放到了 /home/srv/mysql 里, 然后我在 /data/home/srv 目录下 up 就造成了数据丢失的假象..
@MiBAO 偷个手机, 就算卖 500 也是净赚, 就算小偷一天只偷一块一月也有 1.5w 的收入, 而且仅偷一块每天工作时长可能也就半小时...综合来看是个高收入行业
2020-04-15 15:45:14 +08:00
回复了 jeblur 创建的主题 Python Python 学习之看书做题有感
admin-->这叫变量, 'admin' --> 这叫字符串...
2020-04-03 17:30:14 +08:00
回复了 v2byy 创建的主题 Python Python 小问题
作用域嘛,也不难理解吧
2020-01-09 10:28:29 +08:00
回复了 Renco 创建的主题 程序员 上午水贴,睡傻了忘记带鼠标,获得了生产效率-50%的 debuff
macbook pro n 年用户表示触摸板虽然好用,但效率绝对是不及外接鼠标+外接键盘,尤其是一些细微的修图之类的工作,触摸板的优势是不用额外携带鼠标和在小空间办公方便,空间足够大的话,外界键盘+鼠标绝对秒杀触摸板用户
2019-12-27 14:05:29 +08:00
回复了 sazima 创建的主题 程序员 有无靠谱的开发团队 KPI 标准
@passerbytiny 先点名别人不了解情况,然后再来个"我猜" 哈哈哈哈,你也是个人才
1  2  3  4  5  6  7  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1837 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 16:19 · PVG 00:19 · LAX 09:19 · JFK 12:19
Developed with CodeLauncher
♥ Do have faith in what you're doing.