我怎样才能加快我的 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")