定时任务
定时任务是策略里面经常用到的一个模块,Thenextquant
通过服务器心跳来实现定时任务。
定时任务模块可以注册任意多个回调函数,利用服务器每秒执行一次心跳的过程,创建新的协程,在协程里执行回调函数。
1. 服务器心跳配置
{
"HEARTBEAT": {
"interval": 1,
"broadcast": 10
}
}
参数说明:
- interval
int
心跳打印时间间隔(秒),0为不打印可选,默认1
- broadcast
int
心跳广播间隔(秒),0为不广播可选,默认0
配置文件可参考 服务配置模块;
2. 注册定时任务
定时任务模块可以注册任意多个回调函数,利用服务器每秒执行一次心跳的过程,创建新的协程,在协程里执行回调函数。
# 导入模块
from quant.tasks import LoopRunTask
# 定义回调函数
async def function_callback(*args, **kwargs):
pass
# 回调间隔时间(秒)
callback_interval = 5
# 注册回调函数
task_id = LoopRunTask.register(function_callback, callback_interval)
# 取消回调函数
LoopRunTask.unregister(task_id) # 假设此定时任务已经不需要,那么取消此任务回调
注意:
- 回调函数
function_callback
必须是async
异步的,且入参必须包含*args
和**kwargs
; - 回调时间间隔
callback_interval
为秒,默认为1秒; - 回调函数将会在心跳执行的时候被执行,因此可以对心跳次数
heartbeat.count
取余,来确定是否该执行当前任务;
3. 协程任务
协程可以并发执行,提高程序运行效率。
# 导入模块
from quant.tasks import SingleTask
# 定义回调函数
async def function_callback(*args, **kwargs):
pass
# 执行协程任务
SingleTask.run(function_callback, *args, **kwargs)
注意:
- 回调函数
function_callback
必须是async
异步的;