在我的春天,我用自己的事务定义了insert *方法。
当我调用其中一个方法(让我们称之为from timeit import timeit
import re
size = 10000
data = ['foo','bar','backup_20180406'] * size
def find_dates(data):
prefix = 'backup_'
prefix_size = len(prefix)
return [name[prefix_size:] for name in data if name.startswith(prefix)]
def find_dates_testing_numbers(data):
prefix = 'backup_'
prefix_size = len(prefix)
for name in data:
if name.startswith(prefix):
try:
yield int(name[prefix_size:])
except ValueError:
pass
def find_dates_regex(data):
regex = re.compile(r"backup_(?P<date>\d+)")
return [x.group('date') for x in (regex.match(y) for y in data) if x]
def find_dates_pd(data):
import pandas as pd
regex = r"backup_(?P<date>\d+)"
return pd.Series(data).str.extract(regex).dropna()
result = find_dates(data)
print(timeit('find_dates(data)', globals=globals(), number=1000))
# 4.02514289499959 seconds
print(timeit('list(find_dates_testing_numbers(data))', globals=globals(), number=1000))
# 6.0529899510002 seconds
print(timeit('find_dates_regex(data)', globals=globals(), number=1000))
# 8.772153561999403 seconds
print(timeit('find_dates_pd(data)', globals=globals(), number=1000))
# 19.018224569999802
)时,这将调用一个外部方法(称为insertStackOverflow
),该方法以这种方式定义了自己的注释:
insertAndUpdateVersion
。
它执行一个插入,然后调用另一个名为@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.READ_COMMITTED, readOnly=false, rollbackFor=Exception.class)
的方法。在最后一种方法中,交易陷入困境,我不明白为什么。一些建议?感谢
updateNoTransaction