Jarrod Brunson
06/29/2025, 12:33 PMMarvin
06/29/2025, 12:33 PMMarvin
06/29/2025, 12:36 PMPREFECT_WORKER_PREFETCH_SECONDS
option:
1. Environment Variable:
bash
export PREFECT_WORKER_PREFETCH_SECONDS=30 # or your desired value
2. Profile Configuration:
bash
prefect config set worker.prefetch_seconds=30
3. Programmatically within your Python code:
python
from prefect.settings import temporary_settings
with temporary_settings({
"worker.prefetch_seconds": 30
}):
# Your code here
The default value is 10 seconds, which means workers will look ahead 10 seconds into the future for scheduled work. You might want to increase this value if you have infrastructure that takes longer to start up, or decrease it if you need more precise scheduling.
This setting determines how far in advance workers will query for and prepare to execute scheduled flow runs. For example, if set to 30 seconds, workers will look for and prepare to execute any flow runs scheduled to start within the next 30 seconds.
For more details about worker configuration and settings, you can refer to the settings reference documentation.Jarrod Brunson
06/29/2025, 12:38 PMMarvin
06/29/2025, 12:39 PMMarvin
06/29/2025, 12:39 PMPREFECT_WORKER_PREFETCH_SECONDS
setting cannot be configured at the deployment level. This is a worker-level setting that affects how all deployments are handled by that worker. It determines how far in advance a worker will look for and prepare scheduled flow runs.
If you need different prefetch behaviors for different deployments, you would need to:
1. Set up separate workers with different prefetch configurations
2. Use different work pools for those workers
3. Associate your deployments with the appropriate work pools
This way, you can indirectly achieve different prefetch behaviors for different deployments by routing them through different workers/work pools with the desired configuration.
The setting can be configured in three ways, but always at the worker level:
1. Environment variable:
bash
export PREFECT_WORKER_PREFETCH_SECONDS=30
2. Prefect configuration:
bash
prefect config set worker.prefetch_seconds=30
3. When starting a worker via CLI:
bash
prefect worker start -p "my-pool" --prefetch-seconds 30
Jarrod Brunson
06/29/2025, 6:30 PMMarvin
06/29/2025, 6:30 PMMarvin
06/29/2025, 6:31 PMPREFECT_WORKER_PREFETCH_SECONDS
setting, you should see a longer "Pending" period in your flow run's logs. Here's how it works:
1. Let's say you have a flow scheduled for 20000 PM and PREFECT_WORKER_PREFETCH_SECONDS=30
2. The sequence would be:
- At 15930 PM (30 seconds before): Worker picks up the flow run and starts preparing infrastructure
- Flow run status changes to "Pending"
- Infrastructure setup occurs
- Flow run remains in "Pending" until 20000 PM
- At 20000 PM: Flow begins actual execution
The "Pending" period will be most noticeable when:
- Your prefetch time is longer than needed for infrastructure setup
- You're using infrastructure that starts up quickly (like local or process-based runners)
For example, if you set PREFECT_WORKER_PREFETCH_SECONDS=60
but your infrastructure only takes 5 seconds to start, you'll see about 55 seconds of "Pending" time in the logs.
This setting is particularly useful when you have infrastructure that takes longer to start up (like Kubernetes pods or cloud resources), as it ensures resources are ready by the scheduled start time. However, setting it too high will just result in unnecessarily long pending periods.