Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Apache气流中的动态FTP传感器_Python_Airflow_Airflow Operator_Apache Airflow Xcom - Fatal编程技术网

Python Apache气流中的动态FTP传感器

Python Apache气流中的动态FTP传感器,python,airflow,airflow-operator,apache-airflow-xcom,Python,Airflow,Airflow Operator,Apache Airflow Xcom,我想实现一种动态FTP传感器。使用所提供的FTP传感器,我设法使其以这种方式工作: ftp_sensor = FTPSensor( task_id="detect-file-on-ftp", path="./data/test.txt", ftp_conn_id="ftp_default", poke_interval=5, dag=dag,

我想实现一种动态FTP传感器。使用所提供的FTP传感器,我设法使其以这种方式工作:

ftp_sensor = FTPSensor(
        task_id="detect-file-on-ftp",        
        path="./data/test.txt",
        ftp_conn_id="ftp_default",
        poke_interval=5,
        dag=dag,
    )
而且效果很好。但我需要传递动态路径和ftp_conn_id参数。也就是说,我在以前的任务中生成了一组新连接,在ftp_传感器任务中,我想检查我以前生成的每个新连接,如果ftp上存在文件

所以我想首先从XCom获取连接的ID。 我从XCom中的上一个任务发送它们,但似乎无法在任务之外访问XCom。 我的目标是:

active_ftp_connections = context['ti'].xcom_pull(key='active_ftps')
for conn in active_ftp_connections:
  ftp_sensor = FTPSensor(
        task_id="detect-file-on-ftp",        
        path=conn['path'],
        ftp_conn_id=conn['connection'],
        poke_interval=5,
        dag=dag,
    )
但这似乎不是一个可行的解决方案

然后我浪费了大量时间尝试创建自定义FTP传感器,以便动态传递所需的数据,但现在我得出结论,我需要传感器和操作员之间的混合,因为我需要保留戳功能,但也需要执行功能。 我想一个选择是编写一个自定义操作符,从sensor基类实现poke,但现在可能太累了,无法尝试这样做

你知道如何实现我的目标吗?我似乎在网上找不到关于这个话题的任何资料——也许只有我一个人。 如果问题不清楚,请告诉我,以便我提供更多详细信息

更新

我现在把这当作可能

def get_active_ftps(**context):
    active_ftp_connestions = context['ti'].xcom_pull(key='active_ftps')
    return active_ftp_connestions

for ftp in get_active_ftps():
    ftp_sensor = FTPSensor(
            task_id="detect-file-on-ftp",        
            path="./"+ ftp['folder'] +"/test.txt",
            ftp_conn_id=ftp['conn_id'],
            poke_interval=5,
            dag=dag,
        )

但它抛出了一个错误:
断开的DAG:[/usr/local/aiffort/dags/copy\u file\u from\u ftp.py]“ti”

我这样做:

active_ftp_folder = Variable.get('active_ftp_folder')
active_ftp_conn_id = Variable.get('active_ftp_conn_id')
ftp_sensor = FTPSensor(
        task_id="detect-file-on-ftp",        
        path="./"+ active_ftp_folder +"/test.txt",
        ftp_conn_id=active_ftp_conn_id,
        poke_interval=5,
        dag=dag,
    )

然后让dag一次运行一个ftp帐户,因为我意识到在一个直接的非循环图中不应该有循环。。。显然。

我是这样做的:

active_ftp_folder = Variable.get('active_ftp_folder')
active_ftp_conn_id = Variable.get('active_ftp_conn_id')
ftp_sensor = FTPSensor(
        task_id="detect-file-on-ftp",        
        path="./"+ active_ftp_folder +"/test.txt",
        ftp_conn_id=active_ftp_conn_id,
        poke_interval=5,
        dag=dag,
    )
然后让dag一次运行一个ftp帐户,因为我意识到在一个直接的非循环图中不应该有循环。。。显然