turbaszek commented on pull request #8805:
URL: https://github.com/apache/airflow/pull/8805#issuecomment-636334773
I did some simple test:
```python
from datetime import datetime
from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.utils.decorators import apply_defaults
from scripts.perf.perf_kit import python, memory, repeat_and_time
fields = [f"field{i}" for i in range(30)]
class CustomOp(DummyOperator):
template_fields = fields
@apply_defaults
def __init__(self, *args, **kwargs):
super().__init__(*args, task_id=kwargs["task_id"])
for key in kwargs:
if key.startswith("field"):
setattr(self, key, kwargs[key])
if __name__ == '__main__':
N = 10
DAG_N = 100
@repeat_and_time.timing(N)
@repeat_and_time.repeat(N)
def case():
with DAG("xcomargs_test", default_args={"start_date":
datetime.today()}):
op1 = DummyOperator(task_id="op1")
for i in range(DAG_N):
kwargs = {k: op1.output for k in fields}
CustomOp(task_id=f"task_{i}", **kwargs)
print("DAGs: ", DAG_N)
case()
```
Results for 100 DAGs:
- metaclass: 492.990 ms
- setattr + if: 7072.531 ms
- setattr: 7208.424 ms
So using setattr is **14** slower than metaclass...
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]