如何在设定的秒数后结束APScheduler作业?

时间:2014-07-08 14:19:25

标签: concurrency network-programming timeout apscheduler

我使用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是否可以终止太长时间的工作,或者我是否需要以另一种方式解决这个问题?

欢迎所有提示!

1 个答案:

答案 0 :(得分:0)

由于无法从外部终止线程,请考虑设置较短的SSL超时。