使用气流传感器开始DAG运行

时间:2019-03-08 18:54:30

标签: python airflow

我试图轮询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运行进行处理。

2 个答案:

答案 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:

处理任何您想要的

相关问题