jinja2批量生成python脚本
在使用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脚本的更多相关文章
- MS SQL批量生成作业脚本方法介绍总结
在迁移或升级SQL Server数据库服务器时,很多场景下我们不能还原msdb,所以我们必须手工迁移SQL Server相关作业.如果手工生成每一个作业的脚本话,费时又费力,其实SQL Server中 ...
- 批量生成python自动化测试脚本
先前有家供应商与我们合作开发自动化工程,采用的py unittest作为脚本运行框架.我发现他们出的脚本都是挨个手写的,格式上也是参差不齐.所以有了根据用例表批量生成脚本的一段小代码 对一个测试脚本必 ...
- 关于fiddler抓包一键生成python脚本
本人贡献一篇关于抓包转换成脚本的文章 步骤一 打开fiddler,抓到包之后,保存成txt文件 步骤二 脚本里str_filename改成保存的文件名 步骤三 执行脚本一键转换 附上脚本,感谢关注~ ...
- 批量生成DDL脚本
获取用户下所有索引脚本,用于数据迁移后重建索引: set pagesize 0set long 90000set feedback offset echo offspool get_index_ddl ...
- pycharm通过unittest框架批量执行Python脚本用例
1.如下图点击进入配置页 2.新增一个配置,“2”标签选择要执行的脚本的目录或者脚本文件,“3”标签选择要执行的脚本的目录
- 批量生成clr脚本
use [dbname]go --1.产生crl程序集的sql --定义表变量,临时存储中间结果集declare @tb table(name nvarchar(100),permission_set ...
- openvpn 批量生成用户脚本
#/bin/bash for user in "$@" do echo "新增用户:$user" if [ -d "/etc/openvpn/clie ...
- 批量生成文件夹内所有文件md5
说明:md5批量生成批处理脚本,无需安装任何软件,直接调用系统文件进行生成,简单基于windows命令编写了一个批量生成md5值的脚本. 使用说明:新建文本文档,命名为get_md5.bat,直接将代 ...
- python脚本批量生成数据
在平时的工作中,经常会遇到造数据,特别是性能测试的时候更是需要大量的数据.如果一条条的插入数据库或者一条条的创建数据,效率未免有点低.如何快速的造大量的测试数据呢?在不熟悉存储过程的情况下,今天给大家 ...
随机推荐
- 简易数据分析 10 | Web Scraper 翻页——抓取「滚动加载」类型网页
这是简易数据分析系列的第 10 篇文章. 友情提示:这一篇文章的内容较多,信息量比较大,希望大家学习的时候多看几遍. 我们在刷朋友圈刷微博的时候,总会强调一个『刷』字,因为看动态的时候,当把内容拉到屏 ...
- 曹工杂谈:Java 类加载还会死锁?这是什么情况?
一.前言 今天事不是很多,正好在Java交流群里,看到一个比较有意思的问题,于是花了点时间研究了一下,这里做个简单的分享. 先贴一份测试代码,大家可以先猜测一下,执行结果会是怎样的: import j ...
- python3.6.6在CentOS7上的安装
Python官网:https://www.python.org/ 下载指定版本的软件包: [root@General data]# yum clean all && yum rep ...
- 你真的了解setState()吗?
React 中 setState()详细解读 对于 setState() 相信伙伴们都用过,它是 React 官方推荐用来更新组件 state 的 API,但是对于 setState() 你真的了解吗 ...
- Hibernate对象状态之间的神奇转换
状态分类 在Hibernate框架中,为了管理持久化类,Hibernate将其分为了三个状态: 瞬时态(Transient Object) 持久态(Persistent Object) 脱管态(Det ...
- vector function trmplate
/* vector function template programmer:qpz */ #include <iostream> #include <vector> #def ...
- JAVA通过HTTP方式获取数据
测试获取免费天气数据接口:http://www.weather.com.cn/data/sk/101190408.html URL数据如下图: 代码部分: package https; import ...
- js 前端实现打印功能
// 此处是一个打印的方法 可以在点击事件的时候调用 dayin = () =>{ // 获取当前页面要打印的内容 // 这里的className(‘print’)是我给要打印的区域起的 ...
- Codeforces 976D
题意略. 思路:构造题. 我们把全部的d[n]+1个点分作3部分来构造. 首先我们把原问题归约成构造d1.dn.和{d2 - d1,d3 - d1,.....,d[n-1] - d1}这样的问题,其中 ...
- Codeforces 976C
题意略. 思路:由于题中只要让我们找出嵌套的段就行了,那么我们只需要排序一下就好了. 排序方式:按左端由小到大排,左端一样的时候,右端小的排在前. 如果你担心1会因为2的阻隔而不能嵌套3的话,那么2可 ...