1
1
import pickle
2
- from typing import Dict , Optional , TypeVar , Union
2
+ from typing import Any , Dict , Optional , TypeVar , Union
3
3
4
- from redis .asyncio import ConnectionPool , Redis
4
+ from redis .asyncio import BlockingConnectionPool , Redis
5
5
from redis .asyncio .cluster import RedisCluster
6
6
from taskiq import AsyncResultBackend
7
7
from taskiq .abc .result_backend import TaskiqResult
@@ -24,6 +24,8 @@ def __init__(
24
24
keep_results : bool = True ,
25
25
result_ex_time : Optional [int ] = None ,
26
26
result_px_time : Optional [int ] = None ,
27
+ max_connection_pool_size : Optional [int ] = None ,
28
+ ** connection_kwargs : Any ,
27
29
) -> None :
28
30
"""
29
31
Constructs a new result backend.
@@ -32,13 +34,19 @@ def __init__(
32
34
:param keep_results: flag to not remove results from Redis after reading.
33
35
:param result_ex_time: expire time in seconds for result.
34
36
:param result_px_time: expire time in milliseconds for result.
37
+ :param max_connection_pool_size: maximum number of connections in pool.
38
+ :param connection_kwargs: additional arguments for redis BlockingConnectionPool.
35
39
36
40
:raises DuplicateExpireTimeSelectedError: if result_ex_time
37
41
and result_px_time are selected.
38
42
:raises ExpireTimeMustBeMoreThanZeroError: if result_ex_time
39
43
and result_px_time are equal zero.
40
44
"""
41
- self .redis_pool = ConnectionPool .from_url (redis_url )
45
+ self .redis_pool = BlockingConnectionPool .from_url (
46
+ url = redis_url ,
47
+ max_connections = max_connection_pool_size ,
48
+ ** connection_kwargs ,
49
+ )
42
50
self .keep_results = keep_results
43
51
self .result_ex_time = result_ex_time
44
52
self .result_px_time = result_px_time
@@ -146,6 +154,7 @@ def __init__(
146
154
keep_results : bool = True ,
147
155
result_ex_time : Optional [int ] = None ,
148
156
result_px_time : Optional [int ] = None ,
157
+ ** connection_kwargs : Any ,
149
158
) -> None :
150
159
"""
151
160
Constructs a new result backend.
@@ -154,13 +163,17 @@ def __init__(
154
163
:param keep_results: flag to not remove results from Redis after reading.
155
164
:param result_ex_time: expire time in seconds for result.
156
165
:param result_px_time: expire time in milliseconds for result.
166
+ :param connection_kwargs: additional arguments for RedisCluster.
157
167
158
168
:raises DuplicateExpireTimeSelectedError: if result_ex_time
159
169
and result_px_time are selected.
160
170
:raises ExpireTimeMustBeMoreThanZeroError: if result_ex_time
161
171
and result_px_time are equal zero.
162
172
"""
163
- self .redis : RedisCluster [bytes ] = RedisCluster .from_url (redis_url )
173
+ self .redis : RedisCluster [bytes ] = RedisCluster .from_url (
174
+ redis_url ,
175
+ ** connection_kwargs ,
176
+ )
164
177
self .keep_results = keep_results
165
178
self .result_ex_time = result_ex_time
166
179
self .result_px_time = result_px_time
0 commit comments