Bitcoind
python-bitcoinrpc的奇怪重新連接問題
我正在使用<https://github.com/jgarzik/python-bitcoinrpc>來訪問比特幣核心 rpc。我發現了一個非常奇怪的重新連接問題。
from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException # rpc_user and rpc_password are set in the bitcoin.conf file 1. rpc_connection = AuthServiceProxy("http://%s:%s@127.0.0.1:8332"%(rpc_user, rpc_password)) 2. best_block_hash = rpc_connection.getbestblockhash() 3. print(rpc_connection.getblock(best_block_hash))
上述程式碼在 python 互動視窗中執行良好。但是,過了一段時間(例如 10 秒),當我再次執行 line2 時,它會崩潰並顯示以下資訊:
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/fangjun/.local/lib/python3.5/site-packages/bitcoinrpc/authproxy.py", line 136, in __call__ 'Content-type': 'application/json'}) File "/usr/lib/python3.5/http/client.py", line 1106, in request self._send_request(method, url, body, headers) File "/usr/lib/python3.5/http/client.py", line 1151, in _send_request self.endheaders(body) File "/usr/lib/python3.5/http/client.py", line 1102, in endheaders self._send_output(message_body) File "/usr/lib/python3.5/http/client.py", line 936, in _send_output self.send(message_body) File "/usr/lib/python3.5/http/client.py", line 908, in send self.sock.sendall(data) BrokenPipeError: [Errno 32] Broken pipe
如果我通過執行 line1 再次重新連接伺服器,則 line2 執行良好。
看來我需要不時執行 line1 ,但這沒有意義。有人能告訴我原因嗎?謝謝。
RPC 客戶端和 RPC 伺服器都有超時,如果 X 秒沒有收到請求或響應,它們將關閉連接。預設情況下,超時為 30 秒。我相信您遇到了超時,因為您在嘗試發送另一個命令之前等待了一段時間。到那時,一端已超時,因此連接已關閉,從而導致
Broken pipe
錯誤。