4
我有一個任務calculate_common_locations它通過CELERYBEAT_SCHEDULE
運行一次。 任務簡單地調用數據庫中的一個功能:Celerybeat計劃多次執行任務?
@app.task
def calculate_common_locations():
db.execute("SELECT * FROM calculate_centroids('b')")
這是CELERYBEAT_SCHEDULE
條目:
CELERYBEAT_SCHEDULE = {
'common_locations': {
'task': 'clients.tasks.calculate_common_locations',
'schedule': crontab(hour=23, day_of_week='sun'), #every week
},
[..]
}
日程包括運行一次一天或每10秒更多的任務。這些任務似乎不會重複運行多次。芹菜花顯示任務執行超過20次。 第一個按計劃啓動,運行〜100s,成功,然後再次啓動。
只有一個celerybeat運行:
ps -Af | grep celerybeat
foo 24359 779 0 01:53 ? 00:00:04 [celeryd: [email protected]:MainProcess] -active- (worker --beat --app=cloud.celeryapp:app --concurrency=10 -l INFO -s /home/foo/run/celerybeat-schedule --pidfile=/home/foo/run/celerybeat.pid)
這是芹菜如何被啓動(通過supervisord):
celery worker --beat --app=cloud.celery app:app --concurrency=10 -l INFO -s /home/foo/run/celerybeat-schedule --pidfile=/home/foo/run/celerybeat.pid
我測試沒有- 併發性= 10開關。數據庫功能仍然執行多次。
該函數從大型表格(> 1 Mil行)中讀取,該表格經常插入(每秒幾次)。 Postgres鎖顯示所有鎖都被授予。
是否有可能重新運行任務,因爲查詢在某個點終止?
沒有問題時:
- 的任務從Django的殼(直接或通過
.delay()
)運行, - 任務的內容是由輕量級的SQL查詢(SELECT * FROM替代測試),
- 任務的內容被替換爲sleep(100)。
版本:
- 芹菜== 3.1.12
- PSQL(PostgreSQL的)9.3.5
愚蠢的我,謝謝。我添加了分鐘= 0,任務運行一次。 – kev 2014-09-09 01:11:28