​ 在使用airflow的过程中需要大量的dag脚本进行性能测试,如果一个个去编写dag脚本未免太过麻烦,于是想到用python的jinja2模板引擎实现批量脚本生成。

先通过pip命令安装jinja2模块:

$ pip install jinja2

然后创建模板文件(模板可以是任何形式的文本格式,没有特定扩展名,甚至可以不要扩展名):

dag_template

from datetime import timedelta, datetime
import pytz
from airflow.operators.bash_operator import BashOperator
from airflow.operators.dummy_operator import DummyOperator
from airflow.models import DAG default_args = {
'owner': 'cord',
# 'depends_on_past': False,
'depends_on_past': True,
# 'start_date': airflow.utils.dates.days_ago(2),
'wait_for_downstream': True,
'execution_timeout': timedelta(minutes=3),
'email': ['123456@qq.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
} tz = pytz.timezone('Asia/Shanghai')
dt = datetime(2018, 7, 19, 18, 20, tzinfo=tz)
utc_dt = dt.astimezone(pytz.utc).replace(tzinfo=None)
dag = DAG(
'{{ dag_name }}',
default_args=default_args,
description='my DAG',
schedule_interval='*/1 * * * *',
start_date=utc_dt
)
root = DummyOperator(task_id='root', dag=dag)
for i in range(50):
i = str(i)
task = BashOperator(
task_id='task'+i,
bash_command= 'echo `date`',
dag=dag)
task.set_downstream(root)

jinja2中有两种分隔符: {% ... %} {{ ... }} ,其中{% ... %}用于执行for循环或者赋值语句,{{ ... }}负责将表达式的值填充到模板中。这里使用{{ ... }}用于填充dag文件的dag_id 。

通过该模板即可批量生成dag脚本文件,生成代码如下:

Tool.py

import os
from jinja2 import Environment, FileSystemLoader #获取模板
env = Environment(loader = FileSystemLoader(searchpath=""))
template = env.get_template("dag_template") #删除已有的生成文件
for f in os.listdir("./output"):
path_file = os.path.join("./output", f)
if os.path.isfile(path_file):
os.remove(path_file) #生成新的文件
for i in range(1, 101):
output = template.render({'dag_name' : "benchmark%d" % i})
with open("./output/bm%d.py" % i, 'w') as out:
out.write(output)

通过执行Tool.py即可批量生成dag脚本文件了。

jinja2批量生成python脚本的更多相关文章

  1. MS SQL批量生成作业脚本方法介绍总结

    在迁移或升级SQL Server数据库服务器时,很多场景下我们不能还原msdb,所以我们必须手工迁移SQL Server相关作业.如果手工生成每一个作业的脚本话,费时又费力,其实SQL Server中 ...

  2. 批量生成python自动化测试脚本

    先前有家供应商与我们合作开发自动化工程,采用的py unittest作为脚本运行框架.我发现他们出的脚本都是挨个手写的,格式上也是参差不齐.所以有了根据用例表批量生成脚本的一段小代码 对一个测试脚本必 ...

  3. 关于fiddler抓包一键生成python脚本

    本人贡献一篇关于抓包转换成脚本的文章 步骤一 打开fiddler,抓到包之后,保存成txt文件 步骤二 脚本里str_filename改成保存的文件名 步骤三 执行脚本一键转换 附上脚本,感谢关注~ ...

  4. 批量生成DDL脚本

    获取用户下所有索引脚本,用于数据迁移后重建索引: set pagesize 0set long 90000set feedback offset echo offspool get_index_ddl ...

  5. pycharm通过unittest框架批量执行Python脚本用例

    1.如下图点击进入配置页 2.新增一个配置,“2”标签选择要执行的脚本的目录或者脚本文件,“3”标签选择要执行的脚本的目录

  6. 批量生成clr脚本

    use [dbname]go --1.产生crl程序集的sql --定义表变量,临时存储中间结果集declare @tb table(name nvarchar(100),permission_set ...

  7. openvpn 批量生成用户脚本

    #/bin/bash for user in "$@" do echo "新增用户:$user" if [ -d "/etc/openvpn/clie ...

  8. 批量生成文件夹内所有文件md5

    说明:md5批量生成批处理脚本,无需安装任何软件,直接调用系统文件进行生成,简单基于windows命令编写了一个批量生成md5值的脚本. 使用说明:新建文本文档,命名为get_md5.bat,直接将代 ...

  9. python脚本批量生成数据

    在平时的工作中,经常会遇到造数据,特别是性能测试的时候更是需要大量的数据.如果一条条的插入数据库或者一条条的创建数据,效率未免有点低.如何快速的造大量的测试数据呢?在不熟悉存储过程的情况下,今天给大家 ...

随机推荐

  1. 爬虫之爬取电影天堂(request)

    #需要通过代码打开https://www.dytt8.net/网站,拿到网站内容 from urllib.request import urlopen #拿到urlopen import re con ...

  2. 本地在不安装Oracle的情况下安装PLSQL客户端

    本文解决问题:   通常在本地安装PLSQL后,如果本地没有安装Oracle数据库的话,PLSQL是不能使用的,输入远程数据库登录信息会提示:"Oracle Client没有正确安装&quo ...

  3. 开发规范 小白进阶 python代码规范化

    开发规范 软件开发,规范项目的目录结构,代码规范,遵循 PeP8规范等等,让你更加清晰的,合理开发 一功能分类(文件名) settings.py配置文件 配置文件放一些静态参数, 划归固定的路径,文件 ...

  4. 纯数据结构Java实现(1/11)(动态数组)

    我怕说这部分内容太简单后,突然蹦出来一个大佬把我虐到哭,还是悠着点,踏实写 大致内容有: 增删改查,泛型支持,扩容支持,复杂度分析.(铺垫: Java语言中的数组) 基础铺垫 其实没啥好介绍的,顺序存 ...

  5. Zabbix-绘制动态拓扑图高级篇

    0.官网文档介绍: https://www.zabbix.com/documentation/4.0/manual/config/visualisation/maps/map 一.设备名字使用宏显示 ...

  6. Hive 系列(八)—— Hive 数据查询详解

    一.数据准备 为了演示查询操作,这里需要预先创建三张表,并加载测试数据. 数据文件 emp.txt 和 dept.txt 可以从本仓库的resources 目录下载. 1.1 员工表 -- 建表语句 ...

  7. Spark应用场景以及与hadoop的比较

    一.大数据的四大特征: a.海量的数据规模(volume) b.快速的数据流转和动态的数据体系(velocity) c.多样的数据类型(variety) d.巨大的数据价值(value) 二.Spar ...

  8. Javaweb MVC设计模式

    Javaweb MVC设计模式 一.Java EE开发流程 二.MVC设计模式 什么是MVC? MVC是Model-View-Controller的简称,即模型-视图-控制器. MVC是一种设计模式, ...

  9. redis数据结构、持久化、缓存淘汰策略

    Redis 单线程高性能,它所有的数据都在内存中,所有的运算都是内存级别的运算,而且单线程避免了多线程的切换性能损耗问题.redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放 ...

  10. .Net Core 2.2与Java 12性能对比

    我发现基准游戏(https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/csharp.html)是一套非常好的基准测试. ...