Celeryタイミングタスクdemo


ディレクトリ構造:
celery_schedule_demo ├── __init__.py ├── celery_server.py └── celery_task.py
 
 celery_server.py
# -*- coding: utf-8 -*-
from celery import Celery

myapp = Celery('schedule')
myapp.conf.broker_url = 'redis://localhost:6379/0'
myapp.conf.result_backend = 'redis://localhost:6379/1'
myapp.conf.imports = ['celery_task']
myapp.conf.worker_concurrency = 1

myapp.conf.beat_schedule = {
    # 5     demo_schedule  
    'every-5s': {
        'task': 'demo_schedule',
        # 'schedule': crontab(),
        'schedule': 5.0,
    }
}

celery_task.py
# -*- coding: utf-8 -*-
from celery_server import myapp

@myapp.task(name='demo_schedule')
def demo():
    print('demo' * 10)
    return 'demo'
if __name__ == '__main__':
    demo.delay()

celery_schedule_demoディレクトリの下でbeatを起動
 celery -A celery_server.myapp beat -l debug

出力:
celery beat v4.4.7 (cliffs) is starting.
__    -    ... __   -        _
LocalTime -> 2021-01-05 00:33:23
Configuration ->
    . broker -> redis://localhost:6379/0
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> celery.beat.PersistentScheduler
    . db -> celerybeat-schedule
    . logfile -> [stderr]@%DEBUG
    . maxinterval -> 5.00 minutes (300s)
[2021-01-05 00:33:23,769: DEBUG/MainProcess] Setting default socket timeout to 30
[2021-01-05 00:33:23,769: INFO/MainProcess] beat: Starting...
[2021-01-05 00:33:23,775: DEBUG/MainProcess] Current schedule:

[2021-01-05 00:33:23,775: DEBUG/MainProcess] beat: Ticking with max interval->5.00 minutes
[2021-01-05 00:33:23,787: INFO/MainProcess] Scheduler: Sending due task every-5s (demo_schedule)
[2021-01-05 00:33:23,799: DEBUG/MainProcess] beat: Synchronizing schedule...
[2021-01-05 00:33:23,800: DEBUG/MainProcess] demo_schedule sent. id->9c8d08b4-9f4f-4799-9446-d4680cb198cc
[2021-01-05 00:33:23,800: DEBUG/MainProcess] beat: Waking up in 4.97 seconds

 
そしてもう1つの端末でworkerを起動します
 celery -A celery_server.myapp worker -l

出力:
 -------------- celery@bogon v4.4.7 (cliffs)
--- ***** ----- 
-- ******* ---- Darwin-19.5.0-x86_64-i386-64bit 2021-01-05 00:35:15
- *** --- * --- 
- ** ---------- [config]
- ** ---------- .> app:         schedule:0x1065b90f0
- ** ---------- .> transport:   redis://localhost:6379/0
- ** ---------- .> results:     redis://localhost:6379/1
- *** --- * --- .> concurrency: 1 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery
                

[2021-01-05 00:35:18,180: WARNING/ForkPoolWorker-1] demodemodemodemodemodemodemodemodemodemo
[2021-01-05 00:35:23,141: WARNING/ForkPoolWorker-1] demodemodemodemodemodemodemodemodemodemo
[2021-01-05 00:35:28,142: WARNING/ForkPoolWorker-1] demodemodemodemodemodemodemodemodemodemo
[2021-01-05 00:35:33,140: WARNING/ForkPoolWorker-1] demodemodemodemodemodemodemodemodemodemo

5秒間に1回の印刷が表示されます.
カスタムタスクが成功したことを示します.