A pool of sessions that are managed, rotated, and persisted based on usage and age. It ensures effective session management by maintaining a pool of sessions and rotating them based on usage count, expiration time, or custom rules. It provides methods to retrieve sessions, manage their
| 26 | |
| 27 | @docs_group('Session management') |
| 28 | class SessionPool: |
| 29 | """A pool of sessions that are managed, rotated, and persisted based on usage and age. |
| 30 | |
| 31 | It ensures effective session management by maintaining a pool of sessions and rotating them based on |
| 32 | usage count, expiration time, or custom rules. It provides methods to retrieve sessions, manage their |
| 33 | lifecycle, and optionally persist the state to enable recovery. |
| 34 | """ |
| 35 | |
| 36 | def __init__( |
| 37 | self, |
| 38 | *, |
| 39 | max_pool_size: int = 1000, |
| 40 | create_session_settings: dict | None = None, |
| 41 | create_session_function: CreateSessionFunctionType | None = None, |
| 42 | event_manager: EventManager | None = None, |
| 43 | persistence_enabled: bool = False, |
| 44 | persist_state_kvs_name: str | None = None, |
| 45 | persist_state_key: str = 'CRAWLEE_SESSION_POOL_STATE', |
| 46 | ) -> None: |
| 47 | """Initialize a new instance. |
| 48 | |
| 49 | Args: |
| 50 | max_pool_size: Maximum number of sessions to maintain in the pool. You can add more sessions to the pool |
| 51 | by using the `add_session` method. |
| 52 | create_session_settings: Settings for creating new session instances. If None, default settings will |
| 53 | be used. Do not set it if you are providing a `create_session_function`. |
| 54 | create_session_function: A callable to create new session instances. If None, a default session settings |
| 55 | will be used. Do not set it if you are providing `create_session_settings`. |
| 56 | event_manager: The event manager to handle events like persist state. |
| 57 | persistence_enabled: Flag to enable or disable state persistence of the pool. |
| 58 | persist_state_kvs_name: The name of the `KeyValueStore` used for state persistence. |
| 59 | persist_state_key: The key under which the session pool's state is stored in the `KeyValueStore`. |
| 60 | """ |
| 61 | if event_manager: |
| 62 | service_locator.set_event_manager(event_manager) |
| 63 | |
| 64 | self._state = RecoverableState( |
| 65 | default_state=SessionPoolModel( |
| 66 | max_pool_size=max_pool_size, |
| 67 | sessions={}, |
| 68 | ), |
| 69 | logger=logger, |
| 70 | persistence_enabled=persistence_enabled, |
| 71 | persist_state_kvs_name=persist_state_kvs_name, |
| 72 | persist_state_key=persist_state_key or 'CRAWLEE_SESSION_POOL_STATE', |
| 73 | ) |
| 74 | |
| 75 | self._max_pool_size = max_pool_size |
| 76 | self._session_settings = create_session_settings or {} |
| 77 | self._create_session_function = create_session_function |
| 78 | self._persistence_enabled = persistence_enabled |
| 79 | |
| 80 | if self._create_session_function and self._session_settings: |
| 81 | raise ValueError('Both `create_session_settings` and `create_session_function` cannot be provided.') |
| 82 | |
| 83 | # Flag to indicate the context state. |
| 84 | self._active = False |
| 85 |
no outgoing calls