我有一个功能,可以每分钟从交易所获取和存储一些东西。我使用(通常非常出色)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 启动了 3 次 cron。这是 APScheduler 中的错误吗?还是我在这里做错了什么?
欢迎所有提示!