纯小白,顺着廖雪峰的 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='[email protected]',
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='[email protected]',
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='[email protected]',
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工作还需要熟悉哪些模块?
1
laoyuan 2017-01-15 19:04:49 +08:00
好歹你放个教程的链接啊
|
2
tire OP |
4
tire OP |
6
tire OP 我在 save()之后调用 destroy_pool()方法的,就是销毁这个连接池 @hcymk2
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='[email protected]', passwd='1234567890', image='about:blank') await u.save() await destroy_pool() #销毁连接池 |
7
hcymk2 2017-01-15 21:04:30 +08:00
|
10
tire OP @hcymk2
之前是看了,但是印象肯定不深的,只能回去补,主要是不知道是哪个知识点的问题,刚才这个使用模块不知道跟我这个坑哪里有关联 |
11
AlisaDestiny 2017-01-15 21:31:14 +08:00
@tire 哈哈。同道中人啊。我也是看廖老师的网站学的 Python 。不过我知道把项目搭建起来并且测试几个 API 成功了,并没有把整个项目做完。你这个问题我是在教程的评论里找到答案的。你可以仔细看下下面的评论。
|
12
bonfy 2017-01-15 21:33:15 +08:00
liaoxuefeng 的教程是可以评论的,直接把问题提给作者不行么?
|
13
Yourshell 2017-01-15 21:33:37 +08:00
我一直跟着教程走,然后到实战 day2 就蒙逼了。
|
14
tire OP @AlisaDestiny 就是按照评论里的方法来的,看着他们开心的说解决了然而我并没有,我深深怀疑起了我的代码。。
|
16
tire OP @Yourshell 我是自己注释+参考别人注释+参考评论+参考官方文档 葫芦吞枣下来的 也只是看个大概
重点要自己一步步注释上去,把一个个方法的用法看懂了,基本上意思就出来了 Day1 有个朋友给出了实战方法论回去再看看呗 别放弃啊 慢慢啃 |
17
slysly759 2017-01-17 00:09:35 +08:00 via Android
你可以参考我写的。我最近是将廖雪峰这个博客重构,去除 VUE 和 JINJA 的渲 restful 一些。你要是感兴趣可以在 github 上搜索 FuckBlog 找到我们。
另外 就目前来看 应该没有比我注释更详细的了→_→ 对了 我很有些是参考墨灵这位仁兄的,对了,看到你们这些小菜鸡出 BUG 真开心哈哈哈哈(逃 |
19
cowpea 2018-10-05 02:40:14 +08:00
实测,`sys.exit(0)` 可以的。
要是你不可以,是不是没引入。没引入会报错 ``` Traceback (most recent call last): File "./user.py", line 18, in <module> sys.exit(0) NameError: name 'sys' is not defined ...... ...... RuntimeError: Event loop is closed ``` 我第一次也只看最下面报错,忽略上面了。引入后就好了。 |
20
DOUWH 2019-06-21 00:13:03 +08:00
# asyncio.set_event_loop(asyncio.new_event_loop())
asyncio.set_event_loop(loop) 尝试使用这 set_event_loop 再去关闭或者清空连接池 |
21
tongtf 2019-10-16 18:00:15 +08:00
我就用第三期 销毁连接池的方法解决了这个问题啊。
|