Python 气流1.9.0外部任务传感器重试延迟=30产生类型错误:can';t pickle\u thread.RLock对象
正如标题所说;在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示例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
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,在再次检查代码之后,我找到了答案,基本上我错过了一些东西。我看到了这个错误,我的重试延迟都是使用timedeltaretry\u delay=timedelta(分钟=5)
。对我来说,只有当我在运行中间停止DAG时(通过关闭DAG),然后清除所有<代码>过去、将来、下游、上游、递归< /代码>任务。这可能是因为任务计划重试,而我正在尝试清除它们或其他原因吗?我看到了此错误,我的重试延迟都是使用timedeltaretry\u delay=timedelta(分钟=5)
。对我来说,只有当我在运行中间停止DAG时(通过关闭DAG),然后清除所有<代码>过去、将来、下游、上游、递归< /代码>任务。这可能是因为计划重试这些任务,而我正在尝试清除它们还是什么?