如何在Dyalog APL中实现Sleep功能以控制网络请求频率?
在Dyalog APL中实现延迟(Sleep)功能并控制请求频率
Dyalog APL内置了专门用于延迟执行的系统函数⎕DL(Delay的缩写),它可以直接实现类似Sleep()的暂停效果,参数为暂停的秒数(支持小数,比如0.5代表500毫秒)。
针对你的场景——在每行数据处理后添加暂停以避免请求频率过高,有两种常用实现方式:
1. 简化版:对每行处理后统一添加暂停
直接用匿名函数包装你的业务逻辑与延迟操作,再通过¨(每个元素映射)应用到PAIRS的每一行:
{check_buy_buy_sell ⍵ ⋄ ⎕DL 1} ¨ PAIRS
- 代码说明:
¨会遍历PAIRS的每一行,先执行check_buy_buy_sell ⍵处理当前行,再调用⎕DL 1暂停1秒。 - 小缺陷:最后一行处理完毕后仍会执行一次暂停,若想避免可使用下面的循环方式。
2. 精准版:循环处理并仅在行间添加暂停
使用:For循环遍历PAIRS,仅在非最后一行处理后添加暂停:
:For pair :In PAIRS check_buy_buy_sell pair :If pair ≠ ⊃⌽PAIRS ⍝ 判断是否为最后一行 ⎕DL 1.5 ⍝ 暂停1.5秒,可按需调整时长 :EndIf :EndFor
补充说明
⎕DL的参数可以是任意非负数值,比如⎕DL 0.2就是暂停200毫秒,可根据服务器的频率限制灵活调整。- 如果你需要更精细的毫秒级精确延迟(仅Windows平台),也可以调用系统API:
⎕NA 'kernel32.dll|Sleep>i' Sleep 1000 ⍝ 暂停1000毫秒(1秒)
但通常⎕DL已经能满足大部分场景需求。
内容的提问来源于stack exchange,提问作者конструктор
相关产品推荐
相关产品推荐

