Daniel Chan
07/16/2025, 10:15 PM2025-07-16 18:12:57.022 EDT
--- Logging error ---
2025-07-16 18:12:57.022 EDT
pydantic_core._pydantic_core.PydanticSerializationError: Unable to serialize unknown type: <class 'concurrent.futures.thread.ThreadPoolExecutor'>
2025-07-16 18:12:57.022 EDT
The above exception was the direct cause of the following exception:
2025-07-16 18:12:57.022 EDT
{}
2025-07-16 18:12:57.022 EDT
Traceback (most recent call last): File "/usr/local/lib/python3.11/site-packages/prefect/logging/handlers.py", line 336, in emit message = self.format(record)
Marvin
07/16/2025, 10:15 PMMarvin
07/16/2025, 10:16 PMPydanticSerializationError: Unable to serialize unknown type: <class 'concurrent.futures.thread.ThreadPoolExecutor'>
occurs when Prefect's logging system is trying to serialize (convert to a storable format) something that contains a ThreadPoolExecutor, which is not serializable by default.
This typically happens when:
1. You're trying to log or return a ThreadPoolExecutor object directly from a task or flow
2. Your task or flow has attributes that contain ThreadPoolExecutor instances
3. The worker's logging system is attempting to capture state that includes these non-serializable objects
Here are some ways to resolve this:
1. Check Your Task/Flow Returns:
Make sure you're not accidentally returning ThreadPoolExecutor objects from your tasks or flows. Instead, return only the results you need.
python
# Bad
@task
def bad_task():
executor = ThreadPoolExecutor()
return executor # This will cause serialization errors
# Good
@task
def good_task():
with ThreadPoolExecutor() as executor:
result = executor.submit(some_work)
return result.result() # Return actual results instead
2. Review Task Attributes:
If you're storing ThreadPoolExecutor instances as attributes in your task or flow classes, consider making them transient or managing them within context managers instead.
3. Logging Configuration:
You might need to adjust your logging configuration to avoid capturing certain objects. You can do this by implementing custom log filters or adjusting the log level for certain components.
4. Context Management:
Always use ThreadPoolExecutor within a context manager (using with
statement) to ensure proper cleanup:
python
with ThreadPoolExecutor() as executor:
# Your code here
pass
If you're still experiencing issues after trying these solutions, it would be helpful if you could share:
1. The code that's triggering this error
2. Your worker configuration
3. Any custom logging configuration you might have
This would allow me to provide more specific guidance for your use case.Daniel Chan
07/16/2025, 10:20 PMMarvin
07/16/2025, 10:20 PMMarvin
07/16/2025, 10:21 PMPydanticSerializationError
) should NOT directly affect the worker's ability to transition flow runs from pending to running. Here's why:
1. Separate Systems: State transitions and logging are separate systems in Prefect:
- State transitions are handled by the worker's core functionality and its communication with the Prefect API
- Logging is a secondary system used for observability and debugging
2. Error Scope: The PydanticSerializationError you're seeing is specifically related to the logging system's attempt to serialize and record information. While this might affect your ability to see what's happening in the logs, it doesn't interfere with the worker's primary functions.
However, if you're noticing issues with flow runs not transitioning from pending to running, you should look for other potential causes:
1. Worker health and connectivity to the Prefect API
2. Resource constraints (CPU, memory, etc.)
3. Infrastructure provisioning issues
4. Network connectivity problems
5. Work pool or worker configuration issues
If you are experiencing issues with flow runs not transitioning states properly, I'd recommend:
1. Checking the worker's other logs for non-logging related errors
2. Verifying the worker's connection to the Prefect API
3. Monitoring resource usage on the worker pod
4. Checking the work pool configuration
Would you like me to help investigate any of these other potential causes for flow run transition issues? If so, please share:
- Are you seeing flow runs stuck in pending state?
- What does your worker configuration look like?
- Are there any other error messages in the logs besides the serialization error?