我使用APScheduler来调度每分钟调用一个API的作业。我现在得到一个巨大的错误,以:
结尾 File "/usr/lib/python2.7/httplib.py", line 1045, in getresponse
response.begin()
File "/usr/lib/python2.7/httplib.py", line 409, in begin
version, status, reason = self._read_status()
File "/usr/lib/python2.7/httplib.py", line 365, in _read_status
line = self.fp.readline(_MAXLINE + 1)
File "/usr/lib/python2.7/socket.py", line 476, in readline
data = self._sock.recv(self._rbufsize)
File "/usr/lib/python2.7/ssl.py", line 341, in recv
return self.read(buflen)
File "/usr/lib/python2.7/ssl.py", line 260, in read
return self._sslobj.read(len)
SSLError: The read operation timed out
WARNING:apscheduler.scheduler:Execution of job "getAndStoreAPICallResult
(trigger: cron[minute='*'], next run at: 2014-07-08 15:37:00)" skipped: maximum
number of running instances reached (1)
所以我猜API调用不知何故没有得到响应,因此永远不会结束。这将阻止运行下一个作业,因为第一个作业从未结束。因此,它无法开始运行新作业。
我当然可以增加允许的并发运行实例的数量,但这并不能真正解决问题。我想如果作业在一定的秒数(假设是5秒)后还没有完成,我需要让它结束。
因为我有几个其他的api调用作业,我开始与APScheduler,这将是了不起的,如果我能以某种方式解决这个使用APScheduler。有人知道APScheduler是否可以终止运行时间过长的作业,或者我需要以另一种方式解决这个问题吗?
欢迎所有提示!
由于无法从外部终止线程,因此请考虑设置较短的SSL超时。