edeng23 / binance-trade-bot

Automated cryptocurrency trading bot
GNU General Public License v3.0
7.78k stars 2.18k forks source link

Issue with timeout and sqlite3 threads #179

Open tito opened 3 years ago

tito commented 3 years ago

I got that backtrace during the night:

binance_trader    | Traceback (most recent call last):                                                                   
binance_trader    |   File "/app/binance_trade_bot/scheduler.py", line 25, in _run_job                                   
binance_trader    |     super()._run_job(job)                                                                             
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/schedule/__init__.py", line 147, in _run_job          
binance_trader    |     ret = job.run()                                                                                                          
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/schedule/__init__.py", line 491, in run                                   
binance_trader    |     ret = self.job_func()                                                                      
binance_trader    |   File "/app/binance_trade_bot/auto_trader.py", line 165, in update_values                                                   
binance_trader    |     balance = self.manager.get_currency_balance(coin.symbol)                                 
binance_trader    |   File "/app/binance_trade_bot/binance_api_manager.py", line 39, in get_currency_balance             
binance_trader    |     for currency_balance in self.BinanceClient.get_account()[u"balances"]:                   
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/binance/client.py", line 1767, in get_account         
binance_trader    |     return self._get('account', True, data=params)                                             
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/binance/client.py", line 237, in _get                                     
binance_trader    |     return self._request_api('get', path, signed, version, **kwargs)                                 
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/binance/client.py", line 202, in _request_api                                                                                                 
binance_trader    |     return self._request(method, uri, signed, **kwargs)                                                                  
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/binance/client.py", line 196, in _request             
binance_trader    |     self.response = getattr(self.session, method)(uri, **kwargs)                                                             
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 555, in get      
binance_trader    |     return self.request('GET', url, **kwargs)                                                        
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 542, in request
binance_trader    |     resp = self.send(prep, **send_kwargs)                                                             
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 655, in send     
binance_trader    |     r = adapter.send(request, **kwargs)                                                                                                                                                      
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/requests/adapters.py", line 529, in send        
binance_trader    |     raise ReadTimeout(e, request=request)                                                                                                                                                    
binance_trader    | requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='api.binance.com', port=443): Read timed out. (read timeout=10)
binance_trader    |                                                                                                      
binance_trader    | Exception during reset or similar                                                                      
binance_trader    | Traceback (most recent call last):                                                          
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 697, in _finalize_fairy
binance_trader    |     fairy._reset(pool)                                                                    
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 893, in _reset                                                                                                 
binance_trader    |     pool._dialect.do_rollback(self)                                                                                                                                          
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 558, in do_rollback                                                                                       
binance_trader    |     dbapi_connection.rollback()                                                                      
binance_trader    | sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread. The object was created in thread id 139816218830656 and this is thread id 139816127686400.
binance_trader    | Exception closing connection <sqlite3.Connection object at 0x7f297c53e990>                                               
binance_trader    | Traceback (most recent call last):                                                                   
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 697, in _finalize_fairy  
binance_trader    |     fairy._reset(pool)                                                                         
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/pool/base.py", line 893, in _reset         
binance_trader    |     pool._dialect.do_rollback(self)                                                          
binance_trader    |   File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 558, in do_rollback                                                                                       
binance_trader    |     dbapi_connection.rollback()                                                               
binance_trader    | sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread. The object was created in thread id 139816218830656 and this is thread id 139816127686400.

And after that i think the bot is stuck, no more transactions for the last 24h. After restarting it, it started trading.

Pekafu commented 3 years ago

which version did you use?

rel-s commented 3 years ago

Didn't see this bug popping up for a while, anyone still has it?

Pipepito commented 3 years ago

I encountered it like less than a month ago running the bot in a raspberry pi 4.

Sorted it replacing engine = create_engine("sqlite:///data/crypto_trading.db") in database.py engine = create_engine("sqlite:///data/crypto_trading.db?check_same_thread=False")

Its strange because I had it running in other devices and had no issues :S

rel-s commented 3 years ago

Yeah, we know setting check_same_thread=False solves this, but that check is there for a reason... No idea why this bug keeps surfacing.