uWSGI+APScheduler不能执行定时任务?
uWSGI上面跑APSchedler的定时任务不能执行?
uwsgi配置如上图
apscheduler代码如上图
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
uWSGI上面跑APSchedler的定时任务不能执行?
uwsgi配置如上图
apscheduler代码如上图
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
我也碰到了这个问题,查资料得知:
uwsgi 默认one thread one processor ,所以在没有请求的时候,导致部分进程被挂起
解决方法: 在uwsgi配置中添加--enable-threads = true ,问题解决
我在uwsgi.ini文件中加入 enable-threads = true 后,在api中新加入的定时任务还是不执行
最后我在uwsgi.ini 文件中加入
此后在api中加入的新的定时任务,可以正常执行。
你好,上面的方法对于项目启动就需要执行的定时任务生效。可是用户通过api提交的定时任务任然不能正常执行,该怎么解决?
我添加了
--enable-threads = true
后并没有用.后来按照stackoverflow的这个回答Would starting APScheduler in a uwsgi app end up with one scheduler for each worker?找到了uWSGI的mule模块.
mule与普通worker进程一样, 但是request请求不会转发到mule进程, 可以通过这个进程运行定时任务.
最终我的uwsgi.ini为
cronjob/__init__.py
的内容为...mule可以独立实现定时器的功能, 也可以通过
uwsgi
提供的模块实现cron
类型的任务, 但是这样就与uwsgi服务紧耦合了, 我很不喜欢, 所以还是选择APScheduler的实现.uwsgi 里跑的是 web 会话,你不该把定时任务放在 web 会话里去运行,这会与用户请求相互影响。且由于 GIL 的关系,开多线程也用处不大,不如另起一个非 web 进程。即便你用 uwsgi 的 mule ,它也依然是另起一个不跑 web 会话的进程而已,何必增加复杂度。