修改例程flags3_asyncio.py以解决RuntimeError错误

运行示例18-13 flags3_asyncio.py,程序报错如下:

D:\Python\Python311\python.exe D:\fluentPy\chapter17_18\flags3_asyncio.py

REMOTE site: https://www.fluentpython.com/data/flags/

Searching for 20 flags: from BD to VN

5 concurrent connections will be used.

100%|██████████| 20/20 [00:07<00:00, 2.61it/s]


20 flags downloaded.

Elapsed time: 7.70s

exception calling callback for <Future at 0x1bc2da71b90 state=finished returned NoneType>

Traceback (most recent call last):

......

raise RuntimeError('Event loop is closed')

RuntimeError: Event loop is closed

进程已结束,退出代码为 0

很奇怪,明明下载成功了,但是最后还是出现错误提示,经过检查,发现问题出在函数

async def download_one(cc, base_url, semaphore, verbose):

try:

async with semaphore:

image = await get_flag(base_url, cc)

async with semaphore:

country = await get_country(base_url, cc)

except web.HTTPNotFound:

status = HTTPStatus.not_found

msg = 'not found'

except Exception as exc:

raise FetchError(cc) from exc

else:

country = country.replace(' ', '_')

filename = '{}-{}.gif'.format(country, cc)

loop = asyncio.get_event_loop()

loop.run_in_executor(None, save_flag, image, filename)

status = HTTPStatus.ok

msg = 'OK'

if verbose and msg:

print(cc, msg)

return Result(status, cc)

里,只要把loop = asyncio.get_event_loop()改成loop = asyncio.new_event_loop()就好了。

相关推荐
2301_764441334 分钟前
使用Python 和 Streamlit 构建的多维度游戏玩家数据分析
python·游戏·数据分析
xushichao19898 分钟前
Python Web爬虫入门:使用Requests和BeautifulSoup
jvm·数据库·python
qq_416018729 分钟前
开发一个简单的Python计算器
jvm·数据库·python
智算菩萨10 分钟前
OpenCV几何图形绘制工具全栈开发:从中文路径支持到交互式GUI的完整实战(附源码)
开发语言·图像处理·人工智能·python·opencv·计算机视觉
二闹13 分钟前
变量世界的“通行证”:理解Python中的global与nonlocal
后端·python
AI-小柒19 分钟前
DataEyes聚合平台新API接入实战指南:从0到1打通实时数据链路
大数据·运维·开发语言·人工智能·python·自动化·lua
m0_7269659821 分钟前
关于文件上传
开发语言·python
二闹23 分钟前
解锁Python的隐藏管家:with语句的原理与用法
后端·python·设计
干啥啥不行,秃头第一名30 分钟前
实战:用Python开发一个简单的区块链
jvm·数据库·python
qwehjk200832 分钟前
使用Scikit-learn构建你的第一个机器学习模型
jvm·数据库·python