Skip to content

Commit d2f9b7a

Browse files
authored
Merge pull request eternnoir#2565 from utterstep/thread-local-session-manager
[fix] use thread-local aiohttp.ClientSession, as it is not thread-safe
2 parents e0c73a4 + 922ac1d commit d2f9b7a

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

telebot/asyncio_helper.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import asyncio # for future uses
22
import ssl
3+
import threading
34
import aiohttp
45
import certifi
56
from telebot import types
@@ -30,9 +31,16 @@
3031

3132
class SessionManager:
3233
def __init__(self) -> None:
33-
self.session = None
34+
self._local = threading.local()
3435
self.ssl_context = ssl.create_default_context(cafile=certifi.where())
3536

37+
@property
38+
def session(self):
39+
return getattr(self._local, 'session', None)
40+
41+
@session.setter
42+
def session(self, value):
43+
self._local.session = value
3644

3745
async def create_session(self):
3846
self.session = aiohttp.ClientSession(connector=aiohttp.TCPConnector(
@@ -45,7 +53,7 @@ async def get_session(self):
4553
if self.session is None:
4654
self.session = await self.create_session()
4755
return self.session
48-
56+
4957
if self.session.closed:
5058
self.session = await self.create_session()
5159

0 commit comments

Comments
 (0)