多处理性能

2024-10-01 02:33:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个非常简单的脚本,可以使用多处理和SQL。本练习的目的是获得最低执行时间:

def Query(Query):
    conn = sqlite3.connect("DB.db")
    cur = conn.cursor()  
    cur.execute(Query)
    cur.close()
    conn.close()
    return


if __name__ == '__main__':
    conn = sqlite3.connect("DB.db")
    cur = conn.cursor()
    start = time.time()
    curOperations.execute(QUERY)
    curOperations.execute(QUERY)
    curOperations.execute(QUERY)
    end = time.time()
    TIME1 = end - start
    cur.execute('PRAGMA journal_mode=wal')
    conn.commit()

    start = time.time()
    pool = Pool(processes=2)
    pool.imap(Query,[QUERY, QUERY, QUERY])
    pool.close()
    pool.join()
    end = time.time()
    TIME2 = end - start
    cur.close()
    conn.close()

执行20次后,TIME1的平均结果是13.43,TIME2的平均结果是10.39。你知道吗

不是应该比这个低吗?!我做错什么了吗?你知道吗


Tags: closeexecutedbtimeconnectconnquerystart
1条回答
网友
1楼 · 发布于 2024-10-01 02:33:50

对于我的答案,我将假设您的查询只从数据库中读取内容。你知道吗

在你试着让某件事情变得更快之前,你需要知道到底是什么阻止了这个过程变得更快。 并不是所有的速度问题都可以通过多重处理得到改善!你知道吗

因此,您真正需要做的是对应用程序进行配置,以查看它在哪里花费时间。你知道吗

由于SQLite对查询进行缓存,因此我建议在单个进程中分别对每个查询执行计时。 我怀疑第一个查询比下面的查询耗时更长。你知道吗

还要考虑多处理情况下的开销。查询必须经过pickle处理并通过IPC发送到工作进程。然后每个worker必须创建一个连接和游标,然后关闭它们。在实际情况中,查询函数会对数据进行处理,例如,将数据返回到主进程,主进程也需要对数据进行酸洗并通过IPC发送数据。你知道吗

由于所有工作人员都访问同一个数据库,从数据库中读取数据在某个时候将成为瓶颈。你知道吗

如果查询修改数据库,访问将被序列化以防止阻塞。你知道吗

相关问题 更多 >