解救帖:廖雪峰教程 Day 4 - 编写 Model RuntimeError: Event loop is closed 卡得我蛋都碎了

2017-01-15 17:51:54 +08:00
 tire

纯小白,顺着廖雪峰的 python 教程往下走,好不容易走到实战 Day 4 - 编写 Model ,蛋疼连续剧开始了 蛋疼第一期:
#test.py(下面首行都没有缩进,不知道怎么缩进,先忽略不看)
import asyncio, orm
from models import User, Blog, Comment
loop = asyncio.get_event_loop()

async def test():
await orm.create_pool(loop=loop,host='localhost', port=3306,
user='www-data', password='www-data', database='awesome')
u = User(name='Test', email='test@example.com',
passwd='1234567890', image='about:blank')
await u.save()

loop.run_until_complete(test())
loop.close()

结果报错: RuntimeError: Event loop is closed

蛋疼第二期:参考评论建议,在 loop.close()后加入一个 sys.exit()语句
import asyncio, orm
from models import User, Blog, Comment
loop = asyncio.get_event_loop()

async def test():
await orm.create_pool(loop=loop,host='localhost', port=3306,
user='www-data', password='www-data', database='awesome')
u = User(name='Test', email='test@example.com',
passwd='1234567890', image='about:blank')
await u.save()

loop.run_until_complete(test())
loop.close()
#加入 sys.exit()语句
if loop.is_closed():
sys.exit(0)

结果报错: RuntimeError: Event loop is closed (并没有什么软用)

蛋疼第三期:
参考评论建议,在关闭 event loop 之前,首先需要关闭连接池,所以增加
了销毁连接池的方法
orm.py 中定义 destroy_pool()方法:
async def destroy_pool():
#声明全局变量
global __pool
#如果__pool 不为空
if __pool is not None:
#关闭__pool
__pool.close()
#异步调用__pool.wait_closed(), wait_closed()用于等待直到 close()方法完成
await __pool.wait_closed()

然后修改 test.py 代码:
import asyncio, orm
from models import User, Blog, Comment
loop = asyncio.get_event_loop()

async def test():
await orm.create_pool(loop=loop,host='localhost', port=3306,
user='www-data', password='www-data', database='awesome')
u = User(name='Test', email='test@example.com',
passwd='1234567890', image='about:blank')
await u.save()
await destroy_pool() #销毁连接池

loop.run_until_complete(test())
loop.close()
结果报错: timeError: Event loop is closed (看评论别人都解决了为何我还是蛋疼)

蛋疼第四期:询问朋友,朋友说看这里 http://stackoverflow.com/questions/32598231/asyncio-runtimeerror-event-loop-is-closed

结果报错: I don ’ t understand (英文和中文理解力都不够)

抱着在杭州找到一份 python 工作的目的,求 v 友解救,带我出坑,手动抱拳
还有,按照我目前的进度,想快速找到python工作还需要熟悉哪些模块?

7152 次点击
所在节点    Python
21 条回复
tongtf
2019-10-16 18:00:15 +08:00
我就用第三期 销毁连接池的方法解决了这个问题啊。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/334737

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX