python - 在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”。因此,数据帧中的顺序最终会达到预期的效果。我希望我的问题有意义。
先感谢您!
解决方案
推荐阅读
- awk - 使用 awk 连接两个文件时,如何打印不匹配列的值?
- c# - 如何在绑定到两个单独的 contenttemplate 和 content 的两个 contentpresenter 之间切换?
- c# - Windows 窗体 - 打开新线程时如何防止 System.AccessViolationException
- python - Django/Python/MongoDB:如何更新部分网页/表单
- android - 创建 WindowInsetsCompat 的实例
- pandas - 尽管为同一查询创建了 Pandas 数据框,但无法创建 Dask 数据框 (sqlalchemy.exc.NoSuchTableError)
- lua - 试图将 https 字符串发送到 lua 中的网站
- javascript - 有人可以帮助我使用最不安全的登录页面的无效 javascript 代码吗?
- oracle - 如果 Oracle DB 位于单独的系统上,是否可以在 LINUX 上安装 Oracle APEX?
- redux - 单个史诗中的多个异步操作执行顺序