# Background Task Worker The application uses a background task worker to process asynchronous jobs like email processing, file imports, and search indexing. ## Quick Start ```bash # Start with all queues and scheduler (default) python worker.py # Start with specific queues only python worker.py --queues=inbound,outbound # Exclude low-priority queues python worker.py --exclude=reindex,imports # Disable the scheduler (for secondary workers) python worker.py --disable-scheduler ``` ## Queues Tasks are routed to specific queues based on their type. Queues are listed in priority order. | Priority | Queue | Description | |----------|-------|-------------| | 1 (highest) | `management` | Admin/management tasks (migrations, cleanup) | | 2 | `inbound` | Inbound email processing (time-sensitive) | | 3 | `outbound` | Outbound email sending and retries | | 4 | `default` | General tasks (fallback for unrouted tasks) | | 5 | `imports` | File import processing (MBOX, EML, PST, IMAP) | | 6 (lowest) | `reindex` | Search indexing | ### Queue Routing Tasks are automatically routed to queues based on their module: | Task Module | Queue | |-------------|-------| | `core.mda.inbound_tasks.*` | `inbound` | | `core.mda.outbound_tasks.*` | `outbound` | | `core.services.importer.mbox_tasks.*` | `imports` | | `core.services.importer.eml_tasks.*` | `imports` | | `core.services.importer.imap_tasks.*` | `imports` | | `core.services.importer.pst_tasks.*` | `imports` | | `core.services.search.tasks.*` | `reindex` | | Everything else | `default` | ## CLI Options | Option | Description | |--------|-------------| | `--queues`, `-Q` | Comma-separated list of queues to process | | `--exclude`, `-X` | Comma-separated list of queues to exclude | | `--concurrency`, `-c` | Number of worker processes (default: CPU count) | | `--disable-scheduler` | Disable the task scheduler (enabled by default) | | `--loglevel`, `-l` | Logging level (default: INFO) | ## Environment Variables | Variable | Description | |----------|-------------| | `WORKER_CONCURRENCY` | Default concurrency if `--concurrency` not specified | | `CELERY_CONCURRENCY` | Fallback for `WORKER_CONCURRENCY` (legacy) | ## Deployment ### Scalingo (Procfile) ```text worker: python worker.py ``` ### Docker Compose The `worker-dev` service in `compose.yaml` runs the worker for local development: ```yaml worker-dev: command: ["python", "worker.py", "--loglevel=DEBUG"] ``` ### Running Multiple Workers For high-throughput deployments or strict queue isolation, run specialized workers for different queue groups: ```bash # Worker 1: High-priority email processing (with scheduler) python worker.py --queues=management,inbound,outbound # Worker 2: Background tasks only (no scheduler) python worker.py --queues=default,imports,reindex --disable-scheduler ``` This ensures that low-priority tasks (imports, reindex) never compete with email processing. ## Monitoring The `worker-ui` service provides a web UI for monitoring tasks (Flower). Access it at `http://localhost:8903` in development. Task events are enabled by default for monitoring tools. ## Scheduled Tasks The scheduler is enabled by default. The following tasks are scheduled: | Task | Schedule | Queue | |------|----------|-------| | Retry pending messages | Every 5 minutes | `outbound` | | System selfcheck | Configurable interval | `outbound` | | Process inbound queue | Every 5 minutes | `inbound` |