你能使用Python线程返回SQL查询结果集吗

问题描述 投票:0回答:1

我有两个查询需要一段时间,所以我想使用线程来一起处理它们。

AllPlayers = []
AllGames = []

conn.execute("EXEC SelectAllPlayers")
AllPlayers = conn.fetchall()

conn.execute("EXEC SelectAllGames")
AllGames = conn.fetchall()

我想同时运行这两个,但我看了一些询问线程问题的人的回复,但我无法解决。

我还没有尝试过任何东西。 我可以看到线程如何调用函数但返回结果集......

python sql python-multithreading
1个回答
0
投票

当然,下面是如何使用线程同时运行两个查询并检索结果的示例:

    import threading

def fetch_all_players(conn):
    conn.execute("EXEC SelectAllPlayers")
    return conn.fetchall()

def fetch_all_games(conn):
    conn.execute("EXEC SelectAllGames")
    return conn.fetchall()

def main():
    AllPlayers = []
    AllGames = []

    player_thread = threading.Thread(target=lambda: AllPlayers.extend(fetch_all_players(conn)))
    game_thread = threading.Thread(target=lambda: AllGames.extend(fetch_all_games(conn)))

    player_thread.start()
    game_thread.start()

    player_thread.join()
    game_thread.join()

    # At this point, AllPlayers and AllGames will contain the results from the respective queries
    print("All Players:", AllPlayers)
    print("All Games:", AllGames)

if __name__ == "__main__":
    main()

在此示例中,我们定义了两个单独的函数 fetch_all_players 和 fetch_all_games,它们执行各自的查询并使用 conn.fetchall() 返回获取的数据。

在 main 函数中,我们创建两个空列表 AllPlayers 和 AllGames 来存储结果。

然后我们使用threading.Thread()创建两个Thread对象,player_thread和game_thread。每个线程的 target 参数设置为 lambda 函数,该函数调用相应的获取函数(fetch_all_players 或 fetch_all_games)并使用获取的数据扩展相应的结果列表(AllPlayers 或 AllGames)。

我们使用 start() 方法启动两个线程,该方法同时启动目标函数的执行。

我们在两个线程上使用 join() 方法来等待它们完成,然后再继续下一步。这可确保两个查询在访问结果之前已完成执行。

最后,我们可以访问 AllPlayers 和 AllGames 列表中的结果,其中将包含相应查询获取的数据。

通过使用线程,两个查询将同时执行,与顺序运行相比,可能会减少总体执行时间。

© www.soinside.com 2019 - 2024. All rights reserved.