|
10 | 10 |
|
11 | 11 |
|
12 | 12 | def init_celery() -> celery.Celery: |
13 | | - """创建 celery 应用""" |
| 13 | + """初始化 celery 应用""" |
14 | 14 |
|
15 | 15 | # TODO: Update this work if celery version >= 6.0.0 |
16 | 16 | # https://github.com/fastapi-practices/fastapi_best_architecture/issues/321 |
17 | 17 | # https://github.com/celery/celery/issues/7874 |
18 | 18 | celery.app.trace.build_tracer = celery_aio_pool.build_async_tracer |
19 | 19 | celery.app.trace.reset_worker_optimizations() |
20 | 20 |
|
21 | | - app = celery.Celery( |
22 | | - 'fba_celery', |
23 | | - broker_connection_retry_on_startup=True, |
24 | | - worker_pool=celery_aio_pool.pool.AsyncIOPool, |
25 | | - trace=celery_aio_pool.build_async_tracer, |
26 | | - ) |
| 21 | + # Celery Schedule Tasks |
| 22 | + # https://docs.celeryq.dev/en/stable/userguide/periodic-tasks.html |
| 23 | + beat_schedule = task_settings.CELERY_SCHEDULE |
27 | 24 |
|
28 | 25 | # Celery Config |
29 | 26 | # https://docs.celeryq.dev/en/stable/userguide/configuration.html |
30 | | - _redis_broker = ( |
31 | | - f'redis://:{settings.REDIS_PASSWORD}@{settings.REDIS_HOST}:' |
32 | | - f'{settings.REDIS_PORT}/{task_settings.CELERY_BROKER_REDIS_DATABASE}' |
33 | | - ) |
34 | | - _amqp_broker = ( |
35 | | - f'amqp://{task_settings.RABBITMQ_USERNAME}:{task_settings.RABBITMQ_PASSWORD}@' |
36 | | - f'{task_settings.RABBITMQ_HOST}:{task_settings.RABBITMQ_PORT}' |
| 27 | + broker_url = ( |
| 28 | + ( |
| 29 | + f'redis://:{settings.REDIS_PASSWORD}@{settings.REDIS_HOST}:' |
| 30 | + f'{settings.REDIS_PORT}/{task_settings.CELERY_BROKER_REDIS_DATABASE}' |
| 31 | + ) |
| 32 | + if task_settings.CELERY_BROKER == 'redis' |
| 33 | + else ( |
| 34 | + f'amqp://{task_settings.RABBITMQ_USERNAME}:{task_settings.RABBITMQ_PASSWORD}@' |
| 35 | + f'{task_settings.RABBITMQ_HOST}:{task_settings.RABBITMQ_PORT}' |
| 36 | + ) |
37 | 37 | ) |
38 | | - _result_backend = ( |
| 38 | + result_backend = ( |
39 | 39 | f'redis://:{settings.REDIS_PASSWORD}@{settings.REDIS_HOST}:' |
40 | 40 | f'{settings.REDIS_PORT}/{task_settings.CELERY_BACKEND_REDIS_DATABASE}' |
41 | 41 | ) |
42 | | - _result_backend_transport_options = { |
43 | | - 'global_keyprefix': f'{task_settings.CELERY_BACKEND_REDIS_PREFIX}_', |
| 42 | + result_backend_transport_options = { |
| 43 | + 'global_keyprefix': f'{task_settings.CELERY_BACKEND_REDIS_PREFIX}', |
44 | 44 | 'retry_policy': { |
45 | 45 | 'timeout': task_settings.CELERY_BACKEND_REDIS_TIMEOUT, |
46 | 46 | }, |
47 | 47 | } |
48 | 48 |
|
49 | | - # Celery Schedule Tasks |
50 | | - # https://docs.celeryq.dev/en/stable/userguide/periodic-tasks.html |
51 | | - _beat_schedule = task_settings.CELERY_SCHEDULE |
52 | | - |
53 | | - # Update celery settings |
54 | | - app.conf.update( |
55 | | - broker_url=_redis_broker if task_settings.CELERY_BROKER == 'redis' else _amqp_broker, |
56 | | - result_backend=_result_backend, |
57 | | - result_backend_transport_options=_result_backend_transport_options, |
58 | | - timezone=settings.DATETIME_TIMEZONE, |
| 49 | + app = celery.Celery( |
| 50 | + 'fba_celery', |
59 | 51 | enable_utc=False, |
| 52 | + timezone=settings.DATETIME_TIMEZONE, |
| 53 | + beat_schedule=beat_schedule, |
| 54 | + broker_url=broker_url, |
| 55 | + broker_connection_retry_on_startup=True, |
| 56 | + result_backend=result_backend, |
| 57 | + result_backend_transport_options=result_backend_transport_options, |
| 58 | + task_cls='app.task.celery_task.base:TaskBase', |
60 | 59 | task_track_started=True, |
61 | | - beat_schedule=_beat_schedule, |
| 60 | + # TODO: Update this work if celery version >= 6.0.0 |
| 61 | + worker_pool=celery_aio_pool.pool.AsyncIOPool, |
62 | 62 | ) |
63 | 63 |
|
64 | 64 | # Load task modules |
65 | | - app.autodiscover_tasks(task_settings.CELERY_TASKS_PACKAGES) |
| 65 | + app.autodiscover_tasks(task_settings.CELERY_TASK_PACKAGES) |
66 | 66 |
|
67 | 67 | return app |
68 | 68 |
|
69 | 69 |
|
70 | 70 | # 创建 celery 实例 |
71 | | -celery_app = init_celery() |
| 71 | +celery_app: celery.Celery = init_celery() |
0 commit comments