4

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秒としましょう)が経過してもジョブが終了しない場合は、ジョブを終了させる必要があると思います。

APScheduler で開始する API 呼び出しジョブが他にもいくつかあるので、APScheduler を使用してこれを解決できれば最高です。APScheduler が実行時間が長すぎるジョブを終了できるようにするかどうかを誰かが知っていますか、それとも別の方法でこれを解決する必要がありますか?

すべてのヒントは大歓迎です!

4

1 に答える 1

0

外部からスレッドを終了する方法がないため、SSL タイムアウトを短く設定することを検討してください。

于 2014-07-10T11:21:26.373 に答える