【发布时间】:2020-01-08 22:16:27
【问题描述】:
我有我的算法交易脚本,我想一直运行到取消,但脚本总是在以下错误时崩溃,我不知道如何解决,很可能是由于互联网连接不稳定。
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 384, in _make_request
six.raise_from(e, None)
File "<string>", line 3, in raise_from
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 380, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib/python3.7/http/client.py", line 1321, in getresponse
response.begin()
File "/usr/lib/python3.7/http/client.py", line 296, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.7/http/client.py", line 257, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/usr/lib/python3.7/socket.py", line 589, in readinto
return self._sock.recv_into(b)
File "/usr/lib/python3/dist-packages/urllib3/contrib/pyopenssl.py", line 299, in recv_into
raise SocketError(str(e))
OSError: (104, 'ECONNRESET')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 449, in send
timeout=timeout
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 367, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/usr/lib/python3/dist-packages/six.py", line 692, in reraise
raise value.with_traceback(tb)
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 384, in _make_request
six.raise_from(e, None)
File "<string>", line 3, in raise_from
File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 380, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib/python3.7/http/client.py", line 1321, in getresponse
response.begin()
File "/usr/lib/python3.7/http/client.py", line 296, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.7/http/client.py", line 257, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/usr/lib/python3.7/socket.py", line 589, in readinto
return self._sock.recv_into(b)
File "/usr/lib/python3/dist-packages/urllib3/contrib/pyopenssl.py", line 299, in recv_into
raise SocketError(str(e))
urllib3.exceptions.ProtocolError: ('Connection aborted.', OSError("(104, 'ECONNRESET')"))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/pi/Desktop/start_here/LiveStrategy-v20200102.py", line 349, in <module>
continuousRun()
File "/home/pi/Desktop/start_here/LiveStrategy-v20200102.py", line 340, in continuousRun
Decider()
File "/home/pi/Desktop/start_here/LiveStrategy-v20200102.py", line 287, in Decider
getOpenPositions()
File "/home/pi/Desktop/start_here/LiveStrategy-v20200102.py", line 206, in getOpenPositions
openpositions = con.get_open_positions(kind='list')
File "/home/pi/.local/lib/python3.7/site-packages/fxcmpy/fxcmpy.py", line 371, in get_open_positions
data = self.get_model(('OpenPosition',))
File "/home/pi/.local/lib/python3.7/site-packages/fxcmpy/fxcmpy.py", line 344, in get_model
params={'models': list(models)})
File "/home/pi/.local/lib/python3.7/site-packages/fxcmpy/fxcmpy.py", line 2477, in __handle_request__
proxies=self.proxies)
File "/usr/lib/python3/dist-packages/requests/api.py", line 75, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3/dist-packages/requests/api.py", line 60, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 498, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', OSError("(104, 'ECONNRESET')"))
从错误中可以看出,我在 Pi 上运行我的代码,并且我希望脚本在出错时重新启动。到目前为止,我的交易脚本是从另一个带参数的脚本运行的,但它不起作用,我不知道 subprocess 脚本正在打印什么。
应该:
失败重启
从原始脚本打印所有内容
我使用一个参数运行的辅助脚本,该参数由子进程在启动的脚本上传递。
import subprocess
import sys
symbol = sys.argv[1]
while True:
proc = subprocess.Popen(['python', 'LiveStrategy-v20200102.py', symbol ], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
proc.wait()
print(proc)
不幸的是,这个脚本不会在出错时重新启动,我不明白为什么,我从这里的其他一些答案中得到了这个。
显然它不会从subprocess 脚本中打印出来,因为它没有实现。
我想将它保存在 Python 中,所以请不要使用 bash 重新启动脚本的解决方案。
【问题讨论】:
-
看起来像一个简单的
try:...except:...在循环内就足够了,你已经尝试了什么,结果如何? -
你希望它重启多少次?
标签: python python-3.x