fzzff 最近的时间轴更新
fzzff

fzzff

V2EX 第 336568 号会员,加入于 2018-07-27 17:13:31 +08:00
今日活跃度排名 16638
fzzff 最近回复了
3 天前
回复了 leslieranaa 创建的主题 程序员 跨平台命令行换源工具 chsrc
抱歉, 没有仔细看, 是有手动选择的功能的
3 天前
回复了 leslieranaa 创建的主题 程序员 跨平台命令行换源工具 chsrc
很棒, 可不可以增加一个手动选择镜像源的功能
59 天前
回复了 ohayoo 创建的主题 Python 请大佬帮忙瞄一眼我这个丑陋的异步协程代码
asyncio.run(main(uris))无论如何不应该放到循环里, 每次 asyncio.run()会创建一个新的事件循环, 你这个代码跑完创建了一堆事件循环同时运行性能必然受损, 而且你的 result 接收到的也不是完整的结果, 如果你想并发运行一组任务应该用 asyncio.gather
59 天前
回复了 ohayoo 创建的主题 Python 请大佬帮忙瞄一眼我这个丑陋的异步协程代码
以上是 chatgpt 给出的代码优化建议, 另外个人建议你把请求库替换成 httpx
59 天前
回复了 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`函数中增加了异常处理,确保在出现异常时不会导致整个任务中断。
269 天前
回复了 sevenandeleven 创建的主题 Python flask + nginx + uwsgi +docker-compose
docker-compose.yml 的目录层级放哪了, 是不是 build 指定路径不对找不到对应的 Dockerfile
@veoco 感谢回复, 我测试了一下你说的这种方式, 还是报相同的错误, 因为是把另一个项目的用 asyncio 实现的异步爬虫代码移植到一个 django 项目作为 celery 任务, django 项目的 celery 启动用是用的 gevent 模式所以触发了这个错误, 目前已经解决, 把数据库写入部分改成了使用 aiomysql 操作
341 天前
回复了 911061873 创建的主题 Python 类继承及调用问题
简单工厂设计模式
2022-08-10 17:30:49 +08:00
回复了 sunmoon1983 创建的主题 MySQL 求一个数据表设计的思路!
这个类似的需求我也遇到过, 因为涉及的逻辑比较多所以没有动原表存的 json 字段, 增加了个一对多的表专门用来查询
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1001 人在线   最高记录 6067   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 31ms · UTC 19:21 · PVG 03:21 · LAX 12:21 · JFK 15:21
Developed with CodeLauncher
♥ Do have faith in what you're doing.