Python 为什么使用-t选项运行“airflow clear”会引发线程错误?

Python 为什么使用-t选项运行“airflow clear”会引发线程错误?,python,airflow,Python,Airflow,我已经构建了一个带有默认设置的气流DAG作为教程。当我运行DAG时,一些任务失败。当我尝试使用气流清除my_dag-s 2016-08-03-t my_task_name-fd清除失败的任务时,我得到以下异常: TypeError: object.__new__(thread.lock) is not safe, use thread.lock.__new__() 这是气流本身的问题,还是我这边的问题 完整回溯是: Traceback (most recent call last): Fi

我已经构建了一个带有默认设置的气流DAG作为教程。当我运行DAG时,一些任务失败。当我尝试使用气流清除my_dag-s 2016-08-03-t my_task_name-fd清除失败的任务时,我得到以下异常:

TypeError: object.__new__(thread.lock) is not safe, use thread.lock.__new__()
这是气流本身的问题,还是我这边的问题

完整回溯是:

Traceback (most recent call last):
  File "/usr/local/bin/airflow", line 15, in <module>
    args.func(args)
  File "/usr/local/lib/python2.7/dist-packages/airflow/bin/cli.py", line 379, in clear
    include_upstream=args.upstream,
  File "/usr/local/lib/python2.7/dist-packages/airflow/models.py", line 2870, in sub_dag
    dag = copy.deepcopy(self)
  File "/usr/lib/python2.7/copy.py", line 174, in deepcopy
    y = copier(memo)
  File "/usr/local/lib/python2.7/dist-packages/airflow/models.py", line 2856, in __deepcopy__
    setattr(result, k, copy.deepcopy(v, memo))
  File "/usr/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/usr/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/lib/python2.7/copy.py", line 174, in deepcopy
    y = copier(memo)
  File "/usr/local/lib/python2.7/dist-packages/airflow/models.py", line 1974, in __deepcopy__
    setattr(result, k, copy.deepcopy(v, memo))
  File "/usr/lib/python2.7/copy.py", line 174, in deepcopy
    y = copier(memo)
  File "/usr/local/lib/python2.7/dist-packages/airflow/models.py", line 2856, in __deepcopy__
    setattr(result, k, copy.deepcopy(v, memo))
  File "/usr/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/usr/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/lib/python2.7/copy.py", line 174, in deepcopy
    y = copier(memo)
  File "/usr/local/lib/python2.7/dist-packages/airflow/models.py", line 1974, in __deepcopy__
    setattr(result, k, copy.deepcopy(v, memo))
  File "/usr/lib/python2.7/copy.py", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/usr/lib/python2.7/copy.py", line 334, in _reconstruct
    state = deepcopy(state, memo)
  File "/usr/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/usr/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/lib/python2.7/copy.py", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/usr/lib/python2.7/copy.py", line 334, in _reconstruct
    state = deepcopy(state, memo)
  File "/usr/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/usr/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/lib/python2.7/copy.py", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/usr/lib/python2.7/copy.py", line 329, in _reconstruct
    y = callable(*args)
  File "/usr/lib/python2.7/copy_reg.py", line 93, in __newobj__
    return cls.__new__(cls, *args)
TypeError: object.__new__(thread.lock) is not safe, use thread.lock.__new__()
回溯(最近一次呼叫最后一次):
文件“/usr/local/bin/afflow”,第15行,在
args.func(args)
文件“/usr/local/lib/python2.7/dist-packages/afflow/bin/cli.py”,第379行,清晰显示
包括上游=上游参数,
文件“/usr/local/lib/python2.7/dist-packages/afflow/models.py”,第2870行,以sub_-dag格式
dag=copy.deepcopy(self)
文件“/usr/lib/python2.7/copy.py”,第174行,在deepcopy中
y=复印机(备忘录)
文件“/usr/local/lib/python2.7/dist-packages/afflow/models.py”,第2856行,在__
setattr(结果,k,副本。深度副本(v,备忘录))
文件“/usr/lib/python2.7/copy.py”,第163行,在deepcopy中
y=复印机(x,备忘)
文件“/usr/lib/python2.7/copy.py”,第257行,在dict中
y[deepcopy(key,memo)]=deepcopy(value,memo)
文件“/usr/lib/python2.7/copy.py”,第174行,在deepcopy中
y=复印机(备忘录)
文件“/usr/local/lib/python2.7/dist-packages/afflow/models.py”,第1974行,在__
setattr(结果,k,副本。深度副本(v,备忘录))
文件“/usr/lib/python2.7/copy.py”,第174行,在deepcopy中
y=复印机(备忘录)
文件“/usr/local/lib/python2.7/dist-packages/afflow/models.py”,第2856行,在__
setattr(结果,k,副本。深度副本(v,备忘录))
文件“/usr/lib/python2.7/copy.py”,第163行,在deepcopy中
y=复印机(x,备忘)
文件“/usr/lib/python2.7/copy.py”,第257行,在dict中
y[deepcopy(key,memo)]=deepcopy(value,memo)
文件“/usr/lib/python2.7/copy.py”,第174行,在deepcopy中
y=复印机(备忘录)
文件“/usr/local/lib/python2.7/dist-packages/afflow/models.py”,第1974行,在__
setattr(结果,k,副本。深度副本(v,备忘录))
文件“/usr/lib/python2.7/copy.py”,第190行,在deepcopy中
y=_(x,rv,1,备忘录)
文件“/usr/lib/python2.7/copy.py”,第334行,在
状态=深度复制(状态,备忘录)
文件“/usr/lib/python2.7/copy.py”,第163行,在deepcopy中
y=复印机(x,备忘)
文件“/usr/lib/python2.7/copy.py”,第257行,在dict中
y[deepcopy(key,memo)]=deepcopy(value,memo)
文件“/usr/lib/python2.7/copy.py”,第190行,在deepcopy中
y=_(x,rv,1,备忘录)
文件“/usr/lib/python2.7/copy.py”,第334行,在
状态=深度复制(状态,备忘录)
文件“/usr/lib/python2.7/copy.py”,第163行,在deepcopy中
y=复印机(x,备忘)
文件“/usr/lib/python2.7/copy.py”,第257行,在dict中
y[deepcopy(key,memo)]=deepcopy(value,memo)
文件“/usr/lib/python2.7/copy.py”,第190行,在deepcopy中
y=_(x,rv,1,备忘录)
文件“/usr/lib/python2.7/copy.py”,第329行,在
y=可调用(*args)
文件“/usr/lib/python2.7/copy_reg.py”,第93行,在__
返回cls.\uuuu新建\uuuuu(cls,*args)
TypeError:object.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
不要使用deepcopy(它几乎总是错误的)。deepcopy将复制所有引用的对象;在这种情况下,对象图有一些锁;deepcopy无法复制它们,因此您会得到错误

不要使用deepcopy(它几乎总是错误的)。deepcopy将复制所有引用的对象;在这种情况下,对象图有一些锁;deepcopy无法复制它们,因此您会得到错误


看起来这是气流的公开问题:

看起来这是气流的公开问题:

你能分享我的dag代码吗?如果将复杂对象传递给操作符,则会遇到deepcopy问题

请参见下面的一个示例。这里config_文件的参数是一个文件,它的类型很复杂,在这种情况下,将出现deepcopy问题。您可以将所有参数作为单个属性传递,而不是传递此参数。或者,您可以在运算符本身中设置此属性文件变量,而不是作为参数传递

job_flow = MySpecialOperator(
    task_id='create_ec2instance',
    aws_conn_id='service_aws',
    config_file='dev_ec2instance_parameters.cfg',
    initializer_task_id='initializer',
    dag=dag
)

你能分享我的密码吗?如果将复杂对象传递给操作符,则会遇到deepcopy问题

请参见下面的一个示例。这里config_文件的参数是一个文件,它的类型很复杂,在这种情况下,将出现deepcopy问题。您可以将所有参数作为单个属性传递,而不是传递此参数。或者,您可以在运算符本身中设置此属性文件变量,而不是作为参数传递

job_flow = MySpecialOperator(
    task_id='create_ec2instance',
    aws_conn_id='service_aws',
    config_file='dev_ec2instance_parameters.cfg',
    initializer_task_id='initializer',
    dag=dag
)

学习如何提出一个好问题:感谢Youcef,更新以使事情更清楚。学习如何提出一个好问题:感谢Youcef,更新以使事情更清楚。