仅针对某些故障/异常重试 Airflow 运算符的最佳方法是什么?
例如,假设我有一个 Airflow 任务,该任务依赖于外部服务的可用性。如果该服务在任务执行期间变得不可用,我想稍后重试(最多重试 3 次)。对于其他失败我不想重试。
我当前的方法是通过解析来使用on_failure_callback和操作context["ti"].task.retries所需的异常context["exception"],但我认为这很混乱且难以理解。有更好的选择吗?
我正在寻找一种在matplotlib中为每个值绘制多个条形图的方法.为数字数据,这可以是将偏移到X数据来实现,如例如描述在这里:
import numpy as np
import matplotlib.pyplot as plt
X = np.array([1,3,5])
Y = [1,2,3]
Z = [2,3,4]
plt.bar(X - 0.4, Y) # offset of -0.4
plt.bar(X + 0.4, Z) # offset of 0.4
plt.show()
Run Code Online (Sandbox Code Playgroud)
plt.bar()(和ax.bar())也自动处理分类数据:
X = ['A','B','C']
Y = [1,2,3]
plt.bar(X, Y)
plt.show()
Run Code Online (Sandbox Code Playgroud)
在这里,显然不可能添加偏移量,因为类别不与轴上的值直接关联.我可以手动为类别分配数值,并在x轴上设置标签plt.xticks():
X = ['A','B','C']
Y = [1,2,3]
Z = [2,3,4]
_X = np.arange(len(X))
plt.bar(_X - 0.2, Y, 0.4)
plt.bar(_X + 0.2, Z, 0.4)
plt.xticks(_X, X) # set labels …Run Code Online (Sandbox Code Playgroud) 我正在运行composer-1.16.6-airflow-1.10.15。
对于每日计划的 DAG,我想编写一个自定义on_failure_notification,仅在任务实例连续多天失败时发送通知。我的计划是获取 dag 运行的失败任务实例并检查每个最后成功执行日期:
def my_on_failure_notification(context):
failed_tis = context["dag_run"].get_task_instances(state=State.FAILED)
tis_to_notify_about = [ti.task_id for ti in failed_tis if ti.previous_execution_date_success < days_ago(2)]
Run Code Online (Sandbox Code Playgroud)
此操作失败并出现以下跟踪:
[...]
File "/home/airflow/gcs/dags/xxx.py", line 94, in my_on_failure_notification
ti.task_id for ti in failed_tis if ti.previous_execution_date_success < days_ago(2)
File "/usr/local/lib/airflow/airflow/models/taskinstance.py", line 625, in previous_execution_date_success
prev_ti = self._get_previous_ti(state=State.SUCCESS)
File "/usr/local/lib/airflow/airflow/utils/db.py", line 74, in wrapper
return func(*args, **kwargs)
File "/usr/local/lib/airflow/airflow/models/taskinstance.py", line 582, in _get_previous_ti
dag = self.task.dag
AttributeError: 'TaskInstance' object has no attribute 'task'
Run Code Online (Sandbox Code Playgroud)
我认为发生这种情况是因为 TI 是作为 SQLAlchemy 模型检索的,该模型不包含该task …
我正在尝试检查 Plone Products.PythonScript 中变量的类型。我尝试了这段代码:
if isinstance(var, list):
do(sth)
Run Code Online (Sandbox Code Playgroud)
不幸的是,“list”和“type”在 PythonScript 中受到限制。我收到这个错误:
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types
Run Code Online (Sandbox Code Playgroud)
是否有可能检查我的变量的类型?
我正在为基于plone的网站创建页面模板.我使用模板属性语言定义了一些变量:
<tal:macro metal:define-macro="sample" tal:define="var python: here.getThisVar();">
Run Code Online (Sandbox Code Playgroud)
现在我想var在extern javascript文件中使用,我通过单击模板中的按钮来调用.如何传输我的变量,我可以在我的javascript文件中使用它?
我有一个 QTableWidget,最后一列包含可变长度的文本。
我想根据该部分的大小将 QHeaderView 的最后一部分拉伸或调整为其内容的大小。如果内容大小不超过小部件中的剩余空间,我想拉伸它(以防止小部件中出现丑陋、未填充的空间)。我可以通过使用setStretchLastSection(True). 但是,如果内容大小超过拉伸的列,则内容的最后部分将被剪切,因为该列未调整大小。QHeaderViewResizeToContents为这种情况提供了ResizeMode,但在内容较短的情况下,这会使小部件具有未填充的空间。
我想过手动调整列大小。不幸的是,由于sectionSizeFromContents()受保护,我无法直接访问内容大小。我想我可以继承 QHeaderView 并重新实现它,但我想知道是否有更好的解决方案。
python ×4
airflow ×2
plone ×2
zope ×2
javascript ×1
matplotlib ×1
pyqt ×1
pyqt5 ×1
qheaderview ×1
qt ×1
qt5 ×1