GithubHelp home page GithubHelp logo

Comments (12)

AngelLiang avatar AngelLiang commented on May 28, 2024 1

我不知道那位老哥是怎么做到打印出Heap的。我觉得可能他修改了下Celery的源码。

所以要打印,可参考下我hack celery的笔记,在哪多加一个print什么的:
https://github.com/AngelLiang/hacking-celery/blob/hacking_v4.2.1/celery/beat.py#L278

然后简单看了下日志,crontab确实都没send task。我暂时想到:

  1. 可检查数据库看看是不是被禁用了?(PeriodicTask.enabled字段)。
  2. 可考虑多加一个IntervalSchedule定时任务看看是不是可以触发?
  3. 作为对比和排除,可以用celery官方的定时beat scheduler试试,看看是否一切正常。

examples下面的代码是可以执行的话,也请麻烦多对比下两边的代码有哪些不同了。

from celery-sqlalchemy-scheduler.

grayguest avatar grayguest commented on May 28, 2024

上面我使用得是MySQL,我使用sqlite,写入任务时会报错,
sqlalchemy.exc.InterfaceError

sqlalchemy.exc.InterfaceError: (sqlite3.InterfaceError) Error binding parameter 5 - probably unsupported type.
[SQL: INSERT INTO celery_crontab_schedule (minute, hour, day_of_week, day_of_month, month_of_year, timezone) VALUES (?, ?, ?, ?, ?, ?)]
[parameters: ('1', '', '', '', '', <DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>)]
(Background on this error at: http://sqlalche.me/e/rvf5)

from celery-sqlalchemy-scheduler.

AngelLiang avatar AngelLiang commented on May 28, 2024

反馈已收到。

from celery-sqlalchemy-scheduler.

AngelLiang avatar AngelLiang commented on May 28, 2024

请告诉我下你的环境。

  • Linux版本
  • Python版本
  • celery版本
  • MySQL版本
  • celery-sqlalchemy-scheduler版本

等等。我这边好复现你的bug。

from celery-sqlalchemy-scheduler.

grayguest avatar grayguest commented on May 28, 2024
  • 环境(我猜测和环境因素关系不大
    Linux:CentOS7_x64,Linux version 3.10.0-862.3.2.el7.x86_64 ([email protected])
    Python 3.7.0 + celery 4.3.0 + MySQL 5.7.23
    celery-sqlalchemy-scheduler就是今天2019-8-26通过pipenv install刚安装的
  • 复现步骤
    1. 选项配置
      CELERYBEAT_MAX_LOOP_INTERVAL = 10
      CELERYBEAT_SCHEDULER = 'celery_sqlalchemy_scheduler.schedulers:DatabaseScheduler'
    2. 实例化celery为ce
     ce.conf.update(
        {
            'beat_dburi': 'mysql://root:xxxx@xxx:3306/celery-schedule',  # 'sqlite:///schedule.db'
            'timezone': 'Asia/Shanghai'
        }
    )
    
    1. 建库
    CREATE DATABASE /*!32312 IF NOT EXISTS*/`celery-schedule` /*!40100 DEFAULT CHARACTER SET utf8 */;
    
    启动celery worker、celery beat(教程中的方法
    4. 就是按照那个步骤来的,唯一的区别就是mysql连接中我没有connector,我感觉这个不影响。最重要的问题就是写入到数据库中了,celery beat也感受到变化了,但是不send,有什么调试手段吗?我这代码都没写在一块儿,不太好贴代码。

from celery-sqlalchemy-scheduler.

grayguest avatar grayguest commented on May 28, 2024

我晚点写个简化的测试代码试一下,我是直接把代码抄到项目中了。

from celery-sqlalchemy-scheduler.

grayguest avatar grayguest commented on May 28, 2024

和环境没关系,我尝试了你examples文件夹下的tasks.py文件,是可以正常运行timedelta和crontab的,我自己拆开就不行了,晕,感觉哪儿少了点东西,又找不到。
感觉真得是非常奇怪,celery beat正常执行时,会把scheduler的任务写进数据库,使用session也可以添加任务到数据库,但是celery beat就是不触发send task

from celery-sqlalchemy-scheduler.

AngelLiang avatar AngelLiang commented on May 28, 2024

“我尝试了你examples文件夹下的tasks.py文件,是可以正常运行timedelta和crontab的”——这个我就放心了。
“自己拆开就不行了”——可以从时区角度排查一下,时区这一块我处理得不是很好。之前一位老哥帮我修复过bug了。

另外不知道你试过把'-l info'换为-l debug这个参数没有?可以打印出更多信息。

再不行,试试把定时调度的那个heap打印出来看看。参见:
#2 (comment)

from celery-sqlalchemy-scheduler.

grayguest avatar grayguest commented on May 28, 2024

谢谢表哥回复,是的,我在提问之前看了之前的两个Issue,其中一个是关于时区的,我pipenv install celery-sqlalchemy-scheduler后查看代码已经加上了pytz.timezone了,-l debug之前也试过,但是你说的那个定时调度的heap如何才能打印出来呢?

附celery beat -l debug日志,其中<crontab: 1 * * * * (m/h/d/dM/MY)的两条数据是2个不同的任务,先后通过SessionManager创建添加的,也就是下面这2个,其中tasks.no_have_name是未命名的task,默认就是tasks目录下的,default.test是我命令的task,默认会下放到default_tasks队列。
<ModelEntry: not_have_name tasks.not_have_name([], **{}) <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: test default.test(
[], **{}) <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai>> (schedulers.py:416)

(asset-ar0OxIPP) [root@VM asset]# celery beat -A celery_worker.ce -S celery_sqlalchemy_scheduler.schedulers:DatabaseScheduler -l debug
[2019-08-27 10:26:24] [INFO]    - Server initialized for eventlet. (server.py:140)
celery beat v4.3.0 (rhubarb) is starting.
__    -    ... __   -        _
LocalTime -> 2019-08-27 10:26:24
Configuration ->
    . broker -> amqp://xiaopo:**@IP:5672/asset
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> celery_sqlalchemy_scheduler.schedulers.DatabaseScheduler
    . db -> mysql://root:xxxxxx@IP:3306/celery-schedule
    . logfile -> [stderr]@%DEBUG
    . maxinterval -> 10.00 seconds (10s)
[2019-08-27 10:26:24] [DEBUG]   - Setting default socket timeout to 30 (beat.py:105)
[2019-08-27 10:26:24] [INFO]    - beat: Starting... (beat.py:586)
[2019-08-27 10:26:24] [DEBUG]   - DatabaseScheduler: initial read (schedulers.py:399)
[2019-08-27 10:26:24] [INFO]    - Writing entries... (schedulers.py:337)
[2019-08-27 10:26:24] [DEBUG]   - DatabaseScheduler: Fetching database schedule (schedulers.py:292)
[2019-08-27 10:26:24] [DEBUG]   - schedule: <crontab: 0 4 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG]   - schedule: <crontab: 0 3 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG]   - schedule: <crontab: 0 5 1,3,5 * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG]   - schedule: <crontab: 0 7 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG]   - schedule: <crontab: 0 9 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG]   - schedule: <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG]   - schedule: <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG]   - Current schedule:
<ModelEntry: celery.backend_cleanup celery.backend_cleanup(*[], **{}) <crontab: 0 4 * * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: upsert_dns_domain tasks.upsert_dns_domain(*[], **{}) <crontab: 0 3 * * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: upsert_beidou_domain tasks.upsert_beidou_domain(*[], **{}) <crontab: 0 5 1,3,5 * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: update_url_is_external tasks.update_url_is_external(*[], **{}) <crontab: 0 7 * * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: send_business_mail tasks.send_business_mail(*[], **{}) <crontab: 0 9 * * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: not_have_name tasks.not_have_name(*[], **{}) <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai>>
<ModelEntry: test default.test(*[], **{}) <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai>> (schedulers.py:416)
[2019-08-27 10:26:24] [DEBUG]   - schedule: <crontab: 0 4 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:24] [DEBUG]   - schedule: <crontab: 0 3 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:25] [DEBUG]   - schedule: <crontab: 0 5 1,3,5 * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:25] [DEBUG]   - schedule: <crontab: 0 7 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:25] [DEBUG]   - schedule: <crontab: 0 9 * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
[2019-08-27 10:26:25] [DEBUG]   - beat: Ticking with max interval->10.00 seconds (beat.py:588)
[2019-08-27 10:26:25] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:26:35] [DEBUG]   - beat: Synchronizing schedule... (beat.py:381)
[2019-08-27 10:26:35] [INFO]    - Writing entries... (schedulers.py:337)
[2019-08-27 10:26:35] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:26:45] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:26:55] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:27:05] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:27:15] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:27:25] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:27:35] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:27:45] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:27:55] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:28:06] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:28:16] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:28:26] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:28:36] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:28:46] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:28:56] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:29:06] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:29:16] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:29:26] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:29:36] [DEBUG]   - beat: Synchronizing schedule... (beat.py:381)
[2019-08-27 10:29:36] [INFO]    - Writing entries... (schedulers.py:337)
[2019-08-27 10:29:36] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:29:46] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:29:56] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:30:06] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:30:16] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:30:26] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:30:36] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:30:46] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:30:56] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:31:06] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:31:17] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:31:27] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:31:37] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:31:47] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:31:57] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:32:07] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:32:17] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:32:27] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:32:37] [DEBUG]   - beat: Synchronizing schedule... (beat.py:381)
[2019-08-27 10:32:37] [INFO]    - Writing entries... (schedulers.py:337)
[2019-08-27 10:32:37] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:32:47] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:32:57] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:33:07] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:33:17] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:33:27] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:33:37] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:33:47] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:33:57] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:34:08] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:34:18] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:34:28] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)
[2019-08-27 10:34:38] [DEBUG]   - beat: Waking up in 10.00 seconds. (beat.py:600)

from celery-sqlalchemy-scheduler.

grayguest avatar grayguest commented on May 28, 2024

好的,有时间再研究一下。

from celery-sqlalchemy-scheduler.

grayguest avatar grayguest commented on May 28, 2024

@AngelLiang 表哥,是我自己理解有问题,
[2019-08-27 10:26:24] [DEBUG] - schedule: <crontab: 1 * * * * (m/h/d/dM/MY), Asia/Shanghai> (schedulers.py:56)
这个是每个小时的:01分执行,而不是每分钟,我搞错了,经测试celery 4.3可以触发,是我自己的问题,抱歉。

from celery-sqlalchemy-scheduler.

AngelLiang avatar AngelLiang commented on May 28, 2024

好的,没关系。

from celery-sqlalchemy-scheduler.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.