我怎样才能加快我的 python 脚本?
How can I speed up my python script?
我有以下 python 脚本,它逐行读取文件并执行 mysql 更新查询。它非常慢,每个查询似乎需要 1 秒以上。知道为什么这么慢吗?
with open(fname) as f:
for line in f:
line = line.rstrip()
email, name = line.split(':')[0], line.split(':')[-1]
try:
cursor.execute("UPDATE user SET name=%s WHERE email=%s", (name, email))
except mariadb.Error as error:
print("Error: {}".format(error))
您应该可以通过使用索引来解决性能问题:
create index idx_user_email on user(email);
1秒一个更新时间很长
您可以尝试使用多个线程。
import threading
with open(fname) as f:
for line in f:
line = line.rstrip()
email, name = line.split(':')[0], line.split(':')[-1]
thread = threading.Thread(target=updateUser, args=[name, email] )
thread.start()
def updateUser(name, email):
try:
cursor.execute("UPDATE user SET name=%s WHERE email=%s", (name, email))
except mariadb.Error as error:
print("Error: {}".format(error))
它可以避免您在查询数据库时浪费时间。因此,当数据库正在处理查询时,您的程序将准备另一个查询。
如果你想狂热一点,也可以关闭日记功能:
db= sqlite3.connect('database.db')
cursor = db.cursor()
cursor.execute("PRAGMA synchronous = OFF")
cursor.execute("PRAGMA journal_mode = OFF")
我有以下 python 脚本,它逐行读取文件并执行 mysql 更新查询。它非常慢,每个查询似乎需要 1 秒以上。知道为什么这么慢吗?
with open(fname) as f:
for line in f:
line = line.rstrip()
email, name = line.split(':')[0], line.split(':')[-1]
try:
cursor.execute("UPDATE user SET name=%s WHERE email=%s", (name, email))
except mariadb.Error as error:
print("Error: {}".format(error))
您应该可以通过使用索引来解决性能问题:
create index idx_user_email on user(email);
1秒一个更新时间很长
您可以尝试使用多个线程。
import threading
with open(fname) as f:
for line in f:
line = line.rstrip()
email, name = line.split(':')[0], line.split(':')[-1]
thread = threading.Thread(target=updateUser, args=[name, email] )
thread.start()
def updateUser(name, email):
try:
cursor.execute("UPDATE user SET name=%s WHERE email=%s", (name, email))
except mariadb.Error as error:
print("Error: {}".format(error))
它可以避免您在查询数据库时浪费时间。因此,当数据库正在处理查询时,您的程序将准备另一个查询。
如果你想狂热一点,也可以关闭日记功能:
db= sqlite3.connect('database.db')
cursor = db.cursor()
cursor.execute("PRAGMA synchronous = OFF")
cursor.execute("PRAGMA journal_mode = OFF")