Mehdi Lallouache
10/01/2025, 1:04 PMMarvin
10/01/2025, 1:05 PMMarvin
10/01/2025, 1:10 PMprefect deployment ls
prefect deployment inspect <flow-name>/<deployment-name>
Confirm the “Work pool” and “Work queue” shown here match what your worker is polling.
2) Inspect the work pool
prefect work-pool ls
prefect work-pool inspect "<pool-name>"
Look for:
- Paused: false
- Concurrency limit: None or a number with available capacity
- Type matches your intent (process, docker, kubernetes, etc.)
3) Ensure a worker is running and polling the correct pool/queue
- Process/local:
prefect worker start -p "<pool-name>"
- Docker:
uv run --with 'prefect[docker]' prefect worker start -p "<pool-name>"
- Kubernetes:
uv run --with 'prefect[kubernetes]' prefect worker start -p "<pool-name>"
If your worker was started with specific queues, make sure they include the deployment’s queue name.
4) Check concurrency limits
- Pool-level:
prefect work-pool inspect "<pool-name>"
# If needed:
prefect work-pool clear-concurrency-limit "<pool-name>"
# or
prefect work-pool set-concurrency-limit "<pool-name>" 10
- Global workflow concurrency: check the UI under Workflows > Concurrency (docs)
5) Look at the run detail in the UI
- The run’s State message will often say “waiting for a worker” or mention a limit that’s been hit.
A couple of targeted questions to help pinpoint it:
- Which Prefect version and environment (Cloud or self-hosted)?
- What work pool and queue does this deployment target, and do you have a worker running for that pool/queue?
- Is the pool paused or does it have a concurrency limit?
- Does this deployment use a different pool type than your other working flows?
Related docs:
- Work pools and workers: docs
- States (what “Pending” means): docs
- Concurrency limits: docsMehdi Lallouache
10/01/2025, 1:19 PMMarvin
10/01/2025, 1:19 PMMarvin
10/01/2025, 1:21 PMprefect version
- If it’s 3.x: you need a work pool + a running worker.
- If it’s 2.x: you need an agent polling a work queue (different model).
2) If 3.x, verify the deployment’s target pool/queue and that a worker is running:
- Inspect the deployment to see which pool/queue it targets
prefect deployment ls
prefect deployment inspect <flow-name>/<deployment-name>
- List and inspect your pools
prefect work-pool ls
prefect work-pool inspect "<pool-name>"
Confirm the pool is not paused and doesn’t have a blocking concurrency limit.
- Start a worker for that pool (process/local example)
prefect worker start -p "<pool-name>"
If you’re using Docker or K8s pools, start with the appropriate extras:
uv run --with 'prefect[docker]' prefect worker start -p "<pool-name>"
uv run --with 'prefect[kubernetes]' prefect worker start -p "<pool-name>"
3) Re-run and watch the run details in the UI — the state message will usually say “waiting for a worker” if that was the issue.
If you’re actually on Prefect 2.x, replace the above with an agent:
- Start an agent for the correct work queue:
prefect agent start -q "<queue-name>"
(Only do this if you confirm you’re on 2.x; in 3.x, agents were replaced by work pools/workers.)
Can you share:
- Your Prefect version output
- The deployment’s work pool/queue (from prefect deployment inspect)
- Whether a worker is currently running for that pool
Related docs:
- Work pools/workers (3.x): docs
- States and what “Pending” means: docs