我试图轮询HTML API端点以获取新数据,并且仅在存在新数据时才执行DAG。
我有一个带有标准戳功能的传感器,在这种情况下,它将返回try:
for address in emails_to_validate:
parameters = {"address": address}
response = requests.get(url, params=parameters,
auth=("api", "key"))
email.append(address)
is_disposable_address.append(response.json()["is_disposable_address"])
mailbox_verification.append(response.json()["mailbox_verification"])
except Exception as e:
print('An exception has occurred. Giving up on loop:')
print(e)
。
我想知道是否有可能避免安排任务,而仅在传感器返回true时才执行任务?目前,我每天运行DAG,并在24小时后使传感器超时(因此,只有一个同时运行DAG)。但是,如果每天有两次新数据输入,则必须等到下一次DAG运行进行处理。
答案 0 :(得分:0)
我正在做类似的事情,我使用Python监视真空传感器,并打开或关闭一组6个泵中的各种真空泵。显然,我必须尽可能实际地实时监控真空传感器。
我也不希望主服务器上有负载。因此,我将传感器连接到树莓派,并运行Python。它的循环类似于(但要复杂一些),如下所示:
while True:
time.sleep(0.1)
bar = current_vacuum()
write_wtfii_log(bar)
......
在write_wtfii_log(bar)中的代码中,
newdata = json.dumps({'bar': bar,
'pump_1': pump_status[1],
'pump_1_tor': pump_tor[1],
'pump_2': pump_status[2],
'pump_2_tor': pump_tor[2],
'pump_3': pump_status[3],
'pump_3_tor': pump_tor[3],
'pump_4': pump_status[4],
'pump_4_tor': pump_tor[4],
'pump_5': pump_status[5],
'pump_5_tor': pump_tor[5],
'pump_6': pump_status[6],
'pump_6_tor': pump_tor[6]})
url='http://10.0.0.178/flaskr/add_vacuum'
headers = {'Content-Type': 'application/json'}
try:
response = requests.post(url, data=newdata , headers=headers)
except:
print('Error trying to write log entry into wtfii')
pass
return()
这意味着我的主服务器正在愉快地坐着,等待新的读数,这些读数大约每秒发送一次。主服务器使用python + sqlite3运行flask,并在其中记录读数。您可以将其编码为python程序仅发送更改的读数,而不是每个读数。
运行该python代码的raspberry pi的平均负载约为0.02,并且自上次重新引导以来已运行242天。
答案 1 :(得分:0)
您可以使用1个专用于感测的DAG。并使用另一个dag进行处理。
传感DAG:
传感器不断戳->一旦poke()返回true,请使用TriggerDagRunOperator触发传感DAG->使用TriggerDagRunOperator触发处理DAG
处理DAG:
处理任何您想要的