首页 > 解决方案 > 在python中使用for循环迭代的有序多线程

问题描述

我想提高运行时间,因为现在运行我的代码需要很长时间。

我现在正在做的是我首先从我的数据库中的一个表中选择所有数据,然后将它保存到一个变量“sql”中。然后我遍历来自 sql 的数据并调用类中的函数。

请注意有一个顺序,在其中我选择第一行 sql 的编号和名称,然后将其发送到函数,然后我将下一行发送到函数,依此类推...

username = "xxx"
password = "xxx"
sql = pd.read_sql_query('SELECT * FROM {table}', con=engine)
for i, j, v, k in sql.itertuples(index=False):
    df = rest(username, password).get_number(number=i, name=j)

这种同步顺序的原因是我在数据框中创建了一行,其中顺序至关重要,因此如果有一种运行线程的方法将是完美的,但同时仍保持相同的顺序。也许通过创建线程队列等。

# creating an empty Dictionary
dict = {}

class rest:
    def __init__(self, username, password):
        self.username = username
        self.password = password
        self.url = 'xxx:'

    def get_number(self, number, name):

        r = requests.get(f'{self.url}{number}', auth=(self.username, self.password))

        dict["number"] = number
        dict["name"] = r.json()['name']

        df.loc[len(df)] = [dict["number"], dict["name"]]

我的一个想法是,也许有一个解决方案,您可以创建一个由 4 个线程组成的池,其中每个线程都进行一次迭代并异步运行,但是当它们完成时,它们会等待每个线程完成,然后再移动到接下来 4 次迭代。换句话说,如果他们完成 ia 的顺序是:“4 - 2 - 1 - 3”,那么它应该改为“1 - 2 - 3 - 4”。因此,数据帧中的顺序最终会达到预期的效果。我希望我的问题有意义。

先感谢您!

标签: pythonmultithreading

解决方案


推荐阅读