满心期望,收获的确实失望

事务控制框架实践

    由于项目是基于原型系统调整,而原型系统中没有做任何的事务处理,所以想整合一个简单的事务控制包。

    整理项目框架时,发现项目project中引用了其他公司开发的事务控制包,更巧的是,我毕业后去的就是那家公司,而且进入的第一个项目的数据库事务控制就是这个包做的框架,记得当时还反编译看过源码。

    现在需要自己整了,当然希望对自己使用的东西有所了解,于是又反编译看源码,看了一天时间,最后的结论是:事务控制很简单,必须严格的遵守事务控制规则,这些规则包括:

    1、不能嵌套事务。如果存在嵌套事务,则外层的事务回滚不能回滚内层事务的提交。

    2、不能手动释放Connection链接,因为Connection对象是线程内共享的。如果想不使用事务,只从框架中获取数据库链接并人为控制链接的生命周期,将影响到同一线程的其他数据库操作。

    最后的测试也验证了上面两点。

    这就有点像简单的建立一个ThreadLocal<Connection>对象,必须严格的按照

 

TransactionManager.beginTransaction();

getConnection();

只能有一段事务码

TransactionManager.commitTransaction();

IF Exception exist

   Transaction.rollBack();   

中间如果嵌套事务,相当于内外两个单独的事务(即同一个Connection提交两次)。

 

其实这之前我自己做了一个简单的事务控制框架,可以实现嵌套和撇开事务控制单独使用Connection对象。但第一次做,怕出问题,所以心里没底。结果看了那个源码后,感觉只是将程序的层次写得更抽象和复杂了,本质的功能却很死板并且容易出问题。

     诶,菜鸟的起步阶段可能就是这么的举步维艰!特别是项目组只有自己一个人,而且需要看前辈们写的那些没有一点组织性的代码。这种时刻只有一种感觉——什么方面的只是都感觉欠缺,不够用;什么都想学;但学什么都有点力不从心。项目时间紧迫,没什么时间可以抽出来潜心的学点什么,都是囫囵吞枣,一知半解。

from flask import Flask, render_template_string import math import random app = Flask(__name__) def generate_heart_points(): points = [] t = 0 while t <= 2 * math.pi: x = 16 * math.sin(t) ** 3 y = 13 * math.cos(t) - 5 * math.cos(2 * t) - 2 * math.cos(3 * t) - math.cos(4 * t) points.append((x, y)) t += 0.01 return points MESSAGES = [ "我爱你", "遇见你真好", "一生有你", "浪漫至死", "专属心动", "你是唯一", "满心欢喜", "朝朝暮暮", "情深似海", "余生是你" ] @app.route('/') def index(): heart_points = generate_heart_points() messages = random.sample(MESSAGES, min(5, len(MESSAGES))) return render_template_string(""" <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>爱心代码</title> <style> body { margin: 0; overflow: hidden; background-color: black; } .heart { position: absolute; color: pink; font-size: 20px; opacity: 0; animation: float 5s linear; } @keyframes float { 0% { opacity: 0; transform: translateY(100vh) scale(0.5); } 20% { opacity: 1; } 80% { opacity: 1; } 100% { opacity: 0; transform: translateY(-100vh) scale(1.5); } } </style> </head> <body> <script> const heartPoints = {{ heart_points|tojson }}; const messages = {{ messages|tojson }}; function createHeart() { const heart = document.createElement('div'); heart.className = 'heart'; const point = heartPoints[Math.floor(Math.random() * heartPoints.length)]; heart.style.left = `${(point[0] / 16 * 50) + 50}vw`; heart.style.top = `${(point[1] / 13 * 50) + 50}vh`; heart.style.color = `rgb(${Math.random() * 255}, ${Math.random() * 255}, ${Math.random() * 255})`; heart.style.animationDuration = `${3 + Math.random() * 7}s`; heart.innerText = messages[Math.floor(Math.random() * messages.length)]; document.body.appendChild(heart); setTimeout(() => { heart.remove(); }, 5000); } setInterval(createHeart, 500); </script> </body> </html> """, heart_points=heart_points, messages=messages) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)生成视频
11-07
要将使用Flask框架生成的爱心动画网页代码运行结果生成视频,可按以下步骤实现: ### 1. 运行Flask应用 确保Flask应用能正常运行,可通过以下示例代码启动Flask应用: ```python from flask import Flask app = Flask(__name__) @app.route('/') def index(): # 这里应包含生成爱心动画的HTML、CSS和JavaScript代码 return """ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>爱心动画</title> <style> /* 爱心动画的CSS代码 */ .heart { position: relative; width: 100px; height: 100px; background-color: red; transform: rotate(-45deg); animation: heartbeat 1s infinite; } .heart::before, .heart::after { content: ""; position: absolute; width: 100px; height: 100px; background-color: red; border-radius: 50%; } .heart::before { top: -50px; left: 0; } .heart::after { left: 50px; top: 0; } @keyframes heartbeat { 0% { transform: rotate(-45deg) scale(1); } 20% { transform: rotate(-45deg) scale(1.2); } 40% { transform: rotate(-45deg) scale(1); } } </style> </head> <body> <div class="heart"></div> </body> </html> """ if __name__ == '__main__': app.run(debug=True) ``` ### 2. 使用工具录制网页 可使用工具如`Selenium`和`FFmpeg`来录制网页内容。`Selenium`用于自动化打开网页,`FFmpeg`用于将屏幕录制保存为视频。 #### 安装依赖库 ```bash pip install selenium ``` 同时,需下载对应浏览器的驱动(如ChromeDriver),并将其路径配置到系统环境变量中。 #### 录制代码示例 ```python import time import subprocess from selenium import webdriver # 启动Flask应用(可在命令行手动启动) # 打开浏览器并访问网页 driver = webdriver.Chrome() driver.get('http://127.0.0.1:5000') # 等待一段时间,确保动画加载完成 time.sleep(5) # 启动FFmpeg录制屏幕 ffmpeg_command = [ 'ffmpeg', '-f', 'x11grab', '-r', '30', # 帧率 '-video_size', '1920x1080', # 视频分辨率 '-i', ':0.0', # 屏幕输入 '-t', '10', # 录制时长(秒) 'output.mp4' # 输出文件名 ] subprocess.run(ffmpeg_command) # 关闭浏览器 driver.quit() ``` ### 3. 注意事项 - 需确保`FFmpeg`已正确安装,并且其可执行文件路径已配置到系统环境变量中。 - 上述代码中的屏幕分辨率和录制时长可根据需求进行调整。 - 若在Windows系统上运行,需将`-f x11grab`替换为适合Windows的输入设备选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值