如何在APScheduler中向任务函数传递*args与**kwargs?解决传参报错
解决APScheduler任务函数传递参数的错误
错误原因
你写的back_shops_tasks(company)是直接执行了函数,把返回值传给了add_job的func参数,但APScheduler要求func必须是一个可调用对象(函数本身),而不是函数执行结果,所以触发了TypeError。
正确传递参数的方法
APScheduler的add_job方法支持通过args(位置参数)和kwargs(关键字参数)来给任务函数传参,具体用法如下:
1. 传递位置参数(*args)
把要传递的参数放在一个元组里,传给args参数:
scheduler = BackgroundScheduler() # 直接传入函数对象,用args传递位置参数 current_job = scheduler.add_job(back_shops_tasks, id='shops_back', trigger='interval', minutes=15, args=(company,)) scheduler.start()
注意:args需要是一个元组,如果只有一个参数,末尾要加逗号,避免被当成单个值而非元组。
2. 传递关键字参数(**kwargs)
如果任务函数是按关键字接收参数,比如back_shops_tasks(company=xxx),可以用kwargs参数:
scheduler = BackgroundScheduler() current_job = scheduler.add_job(back_shops_tasks, id='shops_back', trigger='interval', minutes=15, kwargs={'company': company}) scheduler.start()
3. 混合使用位置和关键字参数
如果需要同时传两种参数,直接同时指定args和kwargs即可:
# 假设函数是back_shops_tasks(company, arg1, arg2, key1=val1) current_job = scheduler.add_job( back_shops_tasks, id='shops_back', trigger='interval', minutes=15, args=(company, 'arg1_val', 'arg2_val'), kwargs={'key1': 'val1'} )
内容的提问来源于stack exchange,提问作者Андрей Изотов
相关产品推荐
相关产品推荐

