Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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 气流1.9.0外部任务传感器重试延迟=30产生类型错误:can';t pickle\u thread.RLock对象_Python_Airflow_Airflow Scheduler - Fatal编程技术网

Python 气流1.9.0外部任务传感器重试延迟=30产生类型错误:can';t pickle\u thread.RLock对象

Python 气流1.9.0外部任务传感器重试延迟=30产生类型错误:can';t pickle\u thread.RLock对象,python,airflow,airflow-scheduler,Python,Airflow,Airflow Scheduler,正如标题所说;在Airflow 1.9.0中,如果在ExternalTaskSensor中使用retry_delay=30(或任何其他数字)参数,DAG将正常运行,直到您想在Airflow GUI中清除任务实例->它将返回以下错误:“TypeError:无法pickle _thread.RLock objects”(以及一条很好的Oops消息) 但是,如果使用retry\u delay=timedelta(秒=30),则清除任务实例可以正常工作 如果我仔细查看models.py方法,deepco

正如标题所说;在Airflow 1.9.0中,如果在ExternalTaskSensor中使用retry_delay=30(或任何其他数字)参数,DAG将正常运行,直到您想在Airflow GUI中清除任务实例->它将返回以下错误:“TypeError:无法pickle _thread.RLock objects”(以及一条很好的Oops消息) 但是,如果使用retry\u delay=timedelta(秒=30),则清除任务实例可以正常工作

如果我仔细查看models.py方法,deepcopy应该可以正常运行,因此我觉得这是一种奇怪的行为。我是遗漏了什么,还是这是一个错误

下面是一个最小的DAG示例

from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.sensors import ExternalTaskSensor
from datetime import datetime, timedelta


dag_name = 'soft_fail_example'
schedule_interval = "0 * * * *"
default_args = {
            'owner': 'airflow',
            'depends_on_past': False,
            'start_date': datetime(2018, 1, 1),
            'email': [],
            'email_on_failure': False,
            'email_on_retry': False
        }

test_dag = DAG(dag_name, default_args=default_args, schedule_interval=schedule_interval, 
catchup=False, max_active_runs=1)


ets = ExternalTaskSensor(task_id="test_external_task_sensor", dag=test_dag, soft_fail=False, 
timeout=10, retries=0, poke_interval=1, retry_delay=30, external_dag_id="dependent_dag_id",
                         external_task_id="dependent_task_id")

dummy_task = DummyOperator(task_id="collection_task", dag=test_dag)

dummy_task << ets

在再次研究这个问题之后,文档明确指出重试延迟应该是一个时间差。因此,如果您输入一个整数而不是timedelta作为重试延迟,DAG就可以工作,这是非常幸运的

在models.py中,BaseOperator:

   :param retry_delay: delay between retries
   :type retry_delay: timedelta

在再次研究这个问题之后,文档明确指出重试延迟应该是一个时间差。因此,如果您输入一个整数而不是timedelta作为重试延迟,DAG就可以工作,这是非常幸运的

在models.py中,BaseOperator:

   :param retry_delay: delay between retries
   :type retry_delay: timedelta

请发布您的错误的整个stacktrace。@joeb我添加了stacktrace。好的。我以前见过这个(我有一些自定义的Airflow扩展),您需要在Airflow的代码中添加一行代码来帮助调试。在airflow/models.py中3512行之前添加“print(k)”--再次导致错误并共享在跟踪之前打印的行。@joeb我得到以下行:
default\u args、\u dag\u id、\u full\u filepath、\u concurrency、\u pickle\u id、\u description、fileloc、,task_dict
在最后一行之后,我得到了这个错误:
app中的错误:Exception on/admin/aiffair/clear[get]
@joeb,在再次检查代码之后,我找到了答案,基本上我错过了一些东西。谢谢你的调查。请发布你的错误的全部stacktrace。@joeb我添加了stacktrace。好的。我以前见过这个(我有一些自定义的Airflow扩展),您需要在Airflow的代码中添加一行代码来帮助调试。在airflow/models.py中3512行之前添加“print(k)”--再次导致错误并共享在跟踪之前打印的行。@joeb我得到以下行:
default\u args、\u dag\u id、\u full\u filepath、\u concurrency、\u pickle\u id、\u description、fileloc、,task_dict
在最后一行之后,我得到了这个错误:
app中的错误:Exception on/admin/aiffair/clear[get]
@joeb,在再次检查代码之后,我找到了答案,基本上我错过了一些东西。我看到了这个错误,我的重试延迟都是使用timedelta
retry\u delay=timedelta(分钟=5)
。对我来说,只有当我在运行中间停止DAG时(通过关闭DAG),然后清除所有<代码>过去、将来、下游、上游、递归< /代码>任务。这可能是因为任务计划重试,而我正在尝试清除它们或其他原因吗?我看到了此错误,我的重试延迟都是使用timedelta
retry\u delay=timedelta(分钟=5)
。对我来说,只有当我在运行中间停止DAG时(通过关闭DAG),然后清除所有<代码>过去、将来、下游、上游、递归< /代码>任务。这可能是因为计划重试这些任务,而我正在尝试清除它们还是什么?