jgarzik / python-bitcoinrpc

Python interface to bitcoin's JSON-RPC API
GNU Lesser General Public License v2.1
644 stars 304 forks source link

bitcoinrpc.authproxy.JSONRPCException: -342: non-JSON HTTP response with '500 Internal Server Error' from server #98

Open prashant-1926 opened 4 years ago

prashant-1926 commented 4 years ago

Hi, I'm using bitcoinrpc to fetch data using multiprocessing in python (20-40 processes at a time).

I'm frequently getting these errors:

exception catched by line 107: Traceback (most recent call last):
  File "mainF_v2_4_blocks.py", line 66, in block_processing
    block_hash = rpc1.getblockhash(block_height)
  File "/home/user/btc_rpc_1/btc_rpc_venv/lib64/python3.6/site-packages/bitcoinrpc/authproxy.py", line 139, in __call__
    response = self._get_response()
  File "/home/user/btc_rpc_1/btc_rpc_venv/lib64/python3.6/site-packages/bitcoinrpc/authproxy.py", line 179, in _get_response
    http_response = self.__conn.getresponse()
  File "/usr/lib64/python3.6/http/client.py", line 1321, in getresponse
    raise ResponseNotReady(self.__state)
http.client.ResponseNotReady: Request-sent
exception catched by line 107: Traceback (most recent call last):
  File "mainF_v2_4_blocks.py", line 66, in block_processing
    block_hash = rpc1.getblockhash(block_height)
  File "/home/user/btc_rpc_1/btc_rpc_venv/lib64/python3.6/site-packages/bitcoinrpc/authproxy.py", line 136, in __call__
    'Content-type': 'application/json'})
  File "/usr/lib64/python3.6/http/client.py", line 1239, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib64/python3.6/http/client.py", line 1250, in _send_request
    self.putrequest(method, url, **skips)
  File "/usr/lib64/python3.6/http/client.py", line 1108, in putrequest
    raise CannotSendRequest(self.__state)
http.client.CannotSendRequest: Request-sent
exception catched by line 107: Traceback (most recent call last):
  File "mainF_v2_4_blocks.py", line 67, in block_processing
    block = [json.loads(json.dumps(rpc1.getblock(block_hash), use_decimal=True))]
  File "/home/user/btc_rpc_1/btc_rpc_venv/lib64/python3.6/site-packages/bitcoinrpc/authproxy.py", line 139, in __call__
    response = self._get_response()
  File "/home/user/btc_rpc_1/btc_rpc_venv/lib64/python3.6/site-packages/bitcoinrpc/authproxy.py", line 187, in _get_response
    'code': -342, 'message': 'non-JSON HTTP response with \'%i %s\' from server' % (http_response.status, http_response.reason)})
bitcoinrpc.authproxy.JSONRPCException: -342: non-JSON HTTP response with '500 Internal Server Error' from server

Here is timeout setting my connection string:

rpc1 = AuthServiceProxy( "http://%s:%s@%s:%s"%(rpc_user, rpc_password, rpc_host, rpc_port), timeout=86400)

and entry in bitcoin.conf:

rpcthreads=400
rpcworkqueue=1600
rpcservertimeout=7200

What can be the cause the above error? Any suggestions how to handle it? or do I need to change timeout settings?

Thanks.

krewshul commented 2 years ago

The problem comes from the requests module and sending multiple requests at a time. It doesn't have enough time to fully process the request before you are sending another request. Try your calls again but put a slight delay between them.