我是Kotlin的新手,最近开始研究Ktor服务器。要执行数据库操作,服务器需要与MySql服务器进行通信。我开始使用JetBrains Exposed库来编写数据库操作。
我编写了一个暂停函数,以使用事务执行代码块(使用“暴露的DSL”编写的数据库查询)。随后是关于ktor入门指南的博客文章。
import re
import cv2
import glob
import numpy as np
from timeit import default_timer as timer
vid = "some_video.avi"
natsort = lambda s: [int(t) if t.isdigit() else t.lower() for t in re.split('(\d+)', s)]
###############################################################################################################
start = timer()
for i in range(50):
vidcap = cv2.VideoCapture(vid)
success,image = vidcap.read()
vframes = []
while success:
vframes.append(image[None,:,:,:])
success,image = vidcap.read()
vframes = np.concatenate(vframes, 0)
end = timer()
print(end - start) ##### ==> 3.720745261060074
###############################################################################################################
start = timer()
for i in range(50):
iframes = []
listframes = glob.glob("*.jpg")
listframes.sort(key=natsort)
for frame in listframes:
iframes.append(cv2.imread(frame)[None,:,:,:])
iframes = np.concatenate(iframes, 0)
end = timer()
print(end - start) ##### ==> 7.264567195205018
###############################################################################################################
每当我需要执行数据库查询时,我都会呼叫
suspend fun <T> dbQuery(block: () -> T): T = withContext(Dispatchers.IO) {
transaction { block() }
}
因为Exposed使用线程本地事务管理器以及阻止JDBC驱动程序,所以我想知道这样做是否安全吗?
关于如何使用协程实际处理mysql连接,没有好的文档。
如果这是错误的,并且最终将导致交易锁定,则有关如何解决此问题的任何指针都将有所帮助。