searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

关于python中定时任务的执行

2023-09-01 09:47:03
7
0

在使用python执行定时任务的时候,会用到asyncio.get_event_loop()函数,常用以下用法:

loop = asyncio.get_event_loop()

loop.run_until_complete(handle_ecs_gc_task())

loop.close()

 

如果用以上用法,在使用while  True去做循环的时候,就会报错以下的错误:

Event loop is closed

 

原因在于get_event_loop是个全局变量,在同一个循环中关掉之后,就一直是关闭状态了(没找到怎么重新打开的方法,官方源代码的close说的是colse之后不能再调用任何方法---

),关闭之后,run_until_complete调用就会报出上面的错

 

最直接的解决办法就是在循环里不调用loop.close(),或者把close放在while  true外面,也就是只关一次

但是如果loop里面的函数还涉及到数据库锁的问题,不调用close会引入新问题。

所以为了解决上面的问题,可以通过一个间接途径:

把需要定时执行的函数(while true)放入test1.py,把包含loop的函数放入另一个文件test2.py,然后while true去定时的执行test2文件,这样相当于每次执行的时候,都是一个新的event_loop,不会再报错。

循环里强制退出可以用os._exit(0)

 

0条评论
0 / 1000
l****n
2文章数
0粉丝数
l****n
2 文章 | 0 粉丝
l****n
2文章数
0粉丝数
l****n
2 文章 | 0 粉丝
原创

关于python中定时任务的执行

2023-09-01 09:47:03
7
0

在使用python执行定时任务的时候,会用到asyncio.get_event_loop()函数,常用以下用法:

loop = asyncio.get_event_loop()

loop.run_until_complete(handle_ecs_gc_task())

loop.close()

 

如果用以上用法,在使用while  True去做循环的时候,就会报错以下的错误:

Event loop is closed

 

原因在于get_event_loop是个全局变量,在同一个循环中关掉之后,就一直是关闭状态了(没找到怎么重新打开的方法,官方源代码的close说的是colse之后不能再调用任何方法---

),关闭之后,run_until_complete调用就会报出上面的错

 

最直接的解决办法就是在循环里不调用loop.close(),或者把close放在while  true外面,也就是只关一次

但是如果loop里面的函数还涉及到数据库锁的问题,不调用close会引入新问题。

所以为了解决上面的问题,可以通过一个间接途径:

把需要定时执行的函数(while true)放入test1.py,把包含loop的函数放入另一个文件test2.py,然后while true去定时的执行test2文件,这样相当于每次执行的时候,都是一个新的event_loop,不会再报错。

循环里强制退出可以用os._exit(0)

 

文章来自个人专栏
后端开发常用工具
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0