首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加快我的python脚本?

问如何加快我的python脚本?
EN

Stack Overflow用户
提问于 2015-10-21 11:46:40
回答 3查看 113关注 0票数 0

我有下面的python脚本,它逐行读取文件并执行mysql更新查询。它非常慢,每个查询似乎需要超过1秒。知道为什么这么慢吗?

代码语言:javascript
复制
   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))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-21 11:52:47

您应该能够通过使用索引来解决性能问题:

代码语言:javascript
复制
create index idx_user_email on user(email);

1秒的更新是很长的时间。

票数 4
EN

Stack Overflow用户

发布于 2015-10-21 12:03:44

您可以尝试使用多个线程。

代码语言:javascript
复制
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))

它可以避免在查询数据库时浪费时间。因此,当数据库正在处理查询时,您的程序将准备另一个查询。

票数 0
EN

Stack Overflow用户

发布于 2015-10-21 12:54:58

如果你想疯狂的话,你也可以关掉日记:

代码语言:javascript
复制
db= sqlite3.connect('database.db')
cursor = db.cursor()
cursor.execute("PRAGMA synchronous = OFF")
cursor.execute("PRAGMA journal_mode = OFF")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33258498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档