GithubHelp home page GithubHelp logo

Comments (13)

xxxss avatar xxxss commented on May 29, 2024 1

我第一次添加的时候也可以工作,我是直接修改的数据库,在task表里增加了三条(加上默认的clean的一共四条)。其中一个interval的任务每隔17分钟一次,两条是crontab的*/10,然后重新启动beat,就发现只有interval的那个会在heap里排到第一个,17分钟内就会执行,其他的两个cron的都是8个小时以后。
我debug(H) 把heap打印出出来:

[2019-07-13 11:42:09,761: DEBUG/MainProcess] [event_t(time=1562990172.082371, priority=5, entry=<ModelEntry: sometask3 sometask3([], **{}) <freq: 17.00 minutes>>), event_t(time=1562990399.9902568, priority=5, entry=<ModelEntry: celery.backend_cleanup celery.backend_cleanup
(
[], **{}) <crontab: 0 4 * * * (m/h/d/dM/MY), UTC>
event_t(time=1563016799.990166, priority=5, entry=<ModelEntry: sometask sometask(*[], **
{}) <crontab: /10 * * * * (m/h/d/dM/MY), UTC>
>), event_t(time=1563016799.990258, priority=5, entry=<ModelEntry: sometask2 sometask2(
[],
**{}) <crontab: */10 * * * * (m/h/d/dM/MY), UTC>

)]

from celery-sqlalchemy-scheduler.

xxxss avatar xxxss commented on May 29, 2024 1

我用的celery是4.3.0

你好,我在4.3.0下成功添加crontab任务,但是无法触发crontab,没有interval(timedelta)任务,想请教一下

celery-sqlalchemy-scheduler的版本?
怎么添加的crontab任务?
提供一下beat的-debug的日志

from celery-sqlalchemy-scheduler.

AngelLiang avatar AngelLiang commented on May 29, 2024

感谢反馈,全力解决中。。。(我好菜.jpg)

from celery-sqlalchemy-scheduler.

AngelLiang avatar AngelLiang commented on May 29, 2024

“添加了minute 是 */10”,你的目的是添加一个“每小时的第10分钟”执行的任务吗?添加好之后,第一次开始执行任务的时间却是在8小时之后而不是最近的小时执行?

from celery-sqlalchemy-scheduler.

AngelLiang avatar AngelLiang commented on May 29, 2024

经过我排查源码和测试,似乎并没有复现你说的bug(不过已经知道具体改动位置)。我这里用简单调整过的示例代码展示:

版本还是v0.1.1

beat_schedule = {
    'echo-every-3-seconds': {
        'task': 'tasks.echo',
        'schedule': timedelta(seconds=3),
        'args': ('hello', )
    },
    'add-every-minutes': {
        'task': 'tasks.add',
        #'schedule': schedules.crontab('*', '*', '*'),
        # 改为:
        'schedule': schedules.crontab('*/2', '*', '*'),
        'args': (1, 2)
    },
}

Windows10环境,beat app部分日志如下:

> celery beat -A tasks:celery -S tasks:DatabaseScheduler -l info
celery beat v4.2.0 (windowlicker) is starting.
__    -    ... __   -        _
LocalTime -> 2019-07-13 17:37:44
Configuration ->
    . broker -> amqp://guest:**@localhost:5672//
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> celery_sqlalchemy_scheduler.schedulers.DatabaseScheduler
    . db -> sqlite:///schedule.db
    . logfile -> [stderr]@%INFO
    . maxinterval -> 10.00 seconds (10s)
[2019-07-13 17:37:44,360: INFO/MainProcess] beat: Starting...
[2019-07-13 17:37:44,364: INFO/MainProcess] Writing entries...
[2019-07-13 17:37:44,549: INFO/MainProcess] Scheduler: Sending due task echo-every-3-seconds (tasks.echo)
[2019-07-13 17:37:44,574: INFO/MainProcess] Writing entries...
[2019-07-13 17:37:44,650: INFO/MainProcess] Scheduler: Sending due task add-every-minutes (tasks.add)
[2019-07-13 17:37:47,531: INFO/MainProcess] Scheduler: Sending due task echo-every-3-seconds (tasks.echo)
...
[2019-07-13 17:38:00,000: INFO/MainProcess] Scheduler: Sending due task add-every-minutes (tasks.add)
[2019-07-13 17:38:02,535: INFO/MainProcess] Scheduler: Sending due task echo-every-3-seconds (tasks.echo)
...
[2019-07-13 17:40:00,000: INFO/MainProcess] Scheduler: Sending due task add-every-minutes (tasks.add)
[2019-07-13 17:40:02,564: INFO/MainProcess] Scheduler: Sending due task echo-every-3-seconds (tasks.echo)
[2019-07-13 17:40:05,565: INFO/MainProcess] Scheduler: Sending due task echo-every-3-seconds (tasks.echo)

以下三个时间点触发了add-every-minutes任务。

  • 17:37:44,650
  • 17:38:00,000
  • 17:40:00,000

并没有你说的会延迟8个小时后再触发。

如果可以,请告诉我你具体的测试步骤?

from celery-sqlalchemy-scheduler.

xxxss avatar xxxss commented on May 29, 2024

由于我日志是中午11点的,里面的time正好是现在19点多。。其实当时是8个小时以后。。

我自己做了些修改,目前似乎正常了:

diff --git a/celery_sqlalchemy_scheduler/models.py b/celery_sqlalchemy_scheduler/models.py
index 248ef73..82e00ae 100644
--- a/celery_sqlalchemy_scheduler/models.py
+++ b/celery_sqlalchemy_scheduler/models.py
@@ -1,6 +1,7 @@
 # coding=utf-8

 import datetime as dt
+import pytz

 import sqlalchemy as sa
 from sqlalchemy.orm import relationship, foreign, remote
@@ -98,7 +99,7 @@ class CrontabSchedule(ModelBase, ModelMixin):
             hour=self.hour, day_of_week=self.day_of_week,
             day_of_month=self.day_of_month,
             month_of_year=self.month_of_year,
-            # tz=self.timezone
+            tz=pytz.timezone(self.timezone)
         )

     @classmethod
diff --git a/celery_sqlalchemy_scheduler/tzcrontab.py b/celery_sqlalchemy_scheduler/tzcrontab.py
index f8260ab..098db5c 100644
--- a/celery_sqlalchemy_scheduler/tzcrontab.py
+++ b/celery_sqlalchemy_scheduler/tzcrontab.py
@@ -30,10 +30,9 @@ class TzAwareCrontab(schedules.crontab):
         )

     def nowfunc(self):
-        # return self.tz.normalize(
-        #     pytz.utc.localize(datetime.utcnow())
-        # )
-        return datetime.now()
+        return self.tz.normalize(
+            pytz.utc.localize(datetime.utcnow())
+        )

     def is_due(self, last_run_at):
         """Calculate when the next run will take place.

from celery-sqlalchemy-scheduler.

AngelLiang avatar AngelLiang commented on May 29, 2024

感谢反馈。正是这个修改位置。不知有兴趣提交一个PR否?(大佬请喝阔落.jpg)

from celery-sqlalchemy-scheduler.

AngelLiang avatar AngelLiang commented on May 29, 2024

顺便说,在Celery4.3+环境下也有schedules.crontab()类似不触发的问题,所以我这边建议是Celery 4.2.x,不知道你的Celery版本?(可能这就顺便解决了~)

from celery-sqlalchemy-scheduler.

xxxss avatar xxxss commented on May 29, 2024

我用的celery是4.3.0

from celery-sqlalchemy-scheduler.

xxxss avatar xxxss commented on May 29, 2024

那么改之后我测了4.2.0和4.3.0,都能正常用。

from celery-sqlalchemy-scheduler.

AngelLiang avatar AngelLiang commented on May 29, 2024

非常感谢!经过一番折腾,我已经发布v0.1.2版本。有空可多多交流。

from celery-sqlalchemy-scheduler.

grayguest avatar grayguest commented on May 29, 2024

我用的celery是4.3.0

你好,我在4.3.0下成功添加crontab任务,但是无法触发crontab,没有interval(timedelta)任务,想请教一下

from celery-sqlalchemy-scheduler.

grayguest avatar grayguest commented on May 29, 2024

@xxxss 是我自己理解有误,是没有问题的,抱歉,是我自己理解有误。

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.