毎分取引所から何かを取得して保存する機能があります。(通常は優れた)APSchedulerを使用して関数を実行します。残念ながら、ループから cron ジョブを追加すると、期待どおりに動作しないようです。
getAndStore 関数を実行したい、いくつかの文字列を含む小さなリストがあります。私はこれを次のように行うことができます:
from apscheduler.scheduler import Scheduler
apsched = Scheduler()
apsched.start()
apsched.add_cron_job(lambda: getAndStore('A'), minute='0-59')
apsched.add_cron_job(lambda: getAndStore('B'), minute='0-59')
apsched.add_cron_job(lambda: getAndStore('C'), minute='0-59')
これは問題なく動作しますが、私はプログラマーで自動化が大好きなので、次のようにします。
from apscheduler.scheduler import Scheduler
def getAndStore(apiCall):
# does a call to the api using apiCall as a value
# and stores it in the DB.
print apiCall
apiCalls = ['A', 'B', 'C']
apsched = Scheduler()
apsched.start()
for apiCall in apiCalls:
print 'Start cron for: ', apiCall
apsched.add_cron_job(lambda: getAndStore(apiCall), minute='0-59')
これを実行すると、出力は次のようになります。
Start cron for: A
Start cron for: B
Start cron for: C
C
C
C
奇妙なことに、A、B、および C に対して開始するように見えますが、実際には C に対して cron を 3 回開始します。これは APScheduler のバグですか? それとも、ここで何か間違ったことをしていますか?
すべてのヒントは大歓迎です!