icon-project / icon-sdk-python

ICON SDK for Python
45 stars 45 forks source link

How do I increase timeout to avoid the ReadTimeout exception? #68

Closed 0xrpj closed 2 years ago

0xrpj commented 2 years ago

While fetching the block from icon service, I am frequently greeted with an exception due to the timeout of 10s. The server takes around 25s to send the response. I haven't set the time myself but wish to increase it. How do I do it?

Exception is caused here: block = icon_service.get_block(block_height)

Entire error:

2022-01-17T06:34:43.198740+00:00 app[worker.1]: Traceback (most recent call last):
2022-01-17T06:34:43.198753+00:00 app[worker.1]:   File "/app/gangstabet_feed/main.py", line 70, in <module>
2022-01-17T06:34:43.199006+00:00 app[worker.1]:     block = icon_service.get_block(block_height)
2022-01-17T06:34:43.199020+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.9/site-packages/iconsdk/icon_service.py", line 111, in get_block
2022-01-17T06:34:43.199697+00:00 app[worker.1]:     result = self.__provider.make_request(method, params, full_response)
2022-01-17T06:34:43.199711+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.9/site-packages/iconsdk/providers/http_provider.py", line 122, in make_request
2022-01-17T06:34:43.199986+00:00 app[worker.1]:     response = self._make_post_request(request_url, rpc_dict, **self._get_request_kwargs())
2022-01-17T06:34:43.199999+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.9/site-packages/iconsdk/providers/http_provider.py", line 105, in _make_post_request
2022-01-17T06:34:43.200113+00:00 app[worker.1]:     response = session.post(url=request_url, data=json.dumps(data), **kwargs)
2022-01-17T06:34:43.200126+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.9/site-packages/requests/sessions.py", line 577, in post
2022-01-17T06:34:43.200532+00:00 app[worker.1]:     return self.request('POST', url, data=data, json=json, **kwargs)
2022-01-17T06:34:43.200546+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.9/site-packages/requests/sessions.py", line 529, in request
2022-01-17T06:34:43.200755+00:00 app[worker.1]:     resp = self.send(prep, **send_kwargs)
2022-01-17T06:34:43.200768+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.9/site-packages/requests/sessions.py", line 645, in send
2022-01-17T06:34:43.201029+00:00 app[worker.1]:     r = adapter.send(request, **kwargs)
2022-01-17T06:34:43.201041+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.9/site-packages/requests/adapters.py", line 532, in send
2022-01-17T06:34:43.201248+00:00 app[worker.1]:     raise ReadTimeout(e, request=request)
2022-01-17T06:34:43.201314+00:00 app[worker.1]: requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='*********', port=443): Read timed out. (read timeout=10)
eunsoo-icon commented 2 years ago

We are using requests package to communicate with node

You can set parameters of request() when making HTTPProvider object with request_kwargs

IconService(HTTPProvider("http://localhost:9000", 3, request_kwargs={"timeout": 20}))

Check parameters of requests() with this link

0xrpj commented 2 years ago

Thank you. That is what I wanted.