.. _concurrency: ============= 并发 ============= Concurrency :Release: |version| :Date: |today| .. tab:: 中文 Celery 中的并发机制支持任务的并行执行。默认使用的 `prefork` 模式适用于多种场景,通常推荐大多数用户采用。 实际上,切换到其他模式时,某些功能(如 `soft_timeout` 和 `max_tasks_per_child`)会被悄然禁用。 本页面简要介绍了可用的并发选项。你可以在启动 worker 时使用 `--pool` 选项进行选择。 .. tab:: 英文 Concurrency in Celery enables the parallel execution of tasks. The default model, `prefork`, is well-suited for many scenarios and generally recommended for most users. In fact, switching to another mode will silently disable certain features like `soft_timeout` and `max_tasks_per_child`. This page gives a quick overview of the available options which you can pick between using the `--pool` option when starting the worker. 并发选项概述 ------------------------------- Overview of Concurrency Options .. tab:: 中文 - `prefork`:默认选项,适用于 CPU 密集型任务和大多数使用场景。 它稳健可靠,除非有特殊需求,推荐使用该模式。 - `eventlet` 和 `gevent`:适用于 IO 密集型任务,这些模式使用 greenlet 提供高并发能力。 注意,某些特性如 `soft_timeout` 在这些模式下不可用。相关文档详见下方链接。 - `solo`:在主线程中顺序执行任务。 - `threads`:通过线程实现并发,需要系统支持 `concurrent.futures` 模块。 - `custom`:可通过环境变量指定自定义的 worker 池实现。 .. note:: 虽然 `eventlet` 和 `gevent` 等替代模式可用,但它们可能缺少相较于 `prefork` 的某些功能。 除非有明确的需求,否则建议默认从 `prefork` 模式开始使用。 .. tab:: 英文 - `prefork`: The default option, ideal for CPU-bound tasks and most use cases. It is robust and recommended unless there's a specific need for another model. - `eventlet` and `gevent`: Designed for IO-bound tasks, these models use greenlets for high concurrency. Note that certain features, like `soft_timeout`, are not available in these modes. These have detailed documentation pages linked below. - `solo`: Executes tasks sequentially in the main thread. - `threads`: Utilizes threading for concurrency, available if the `concurrent.futures` module is present. - `custom`: Enables specifying a custom worker pool implementation through environment variables. .. note:: While alternative models like `eventlet` and `gevent` are available, they may lack certain features compared to `prefork`. We recommend `prefork` as the starting point unless specific requirements dictate otherwise. .. toctree:: :maxdepth: 2 eventlet gevent