gpt4 book ai didi

python - 让函数等待,直到返回 'n' 个结果

转载 作者:行者123 更新时间:2023-12-01 07:43:18 30 4
gpt4 key购买 nike

由于数据库的限制,我需要将线程合并到我的代码中。我的问题是我有一个字典列表(大约 850 个元素)和一个元素列表(相同长度),但我一次只能查询其中 50 个。因此,我使用生成器将列表分成 50 个 block 。

def list_split(ls):
n = 50
for i in range(0, len(ls), n):
yield ls[i:i + n]

然后,我将这两个列表传递到一个函数中,该函数实际上将它们分别附加到一个新字典中,每个字典的将是查询,每个查询大约需要 2 秒。

def query(ls1, ls2):

count = 0
query_return_dict = {}

for i, j in zip(ls2, ls1):
for key, value in zip(i, j):
# ret = token.query(j) replace 'value' with 'ret' once ready to run
query_return_dict[key] = value
count += 1

print(query_return_dict)
return query_return_dict

然后我调用他们:

ls1 = list_split(unchunked_ls1)
ls2 = list_split(unchunked_ls2)

现在这是我不理解此代码块的“单”线程的地方:

def main():
thread = threading.Thread(target=query, args=(ls1, ls2))
thread.start()

thread.join()

if __name__ == '__main__':
main()

我正在通过这个site学习线程,但我不知道它是否做了我打算做的事情,我只是真的很犹豫是否要在我们的数据库上实际运行它,因为存在通过查询淹没它来备份它的风险。

TL;博士,

我需要确保 def query(ls1, ls2): 只会在来自 ls1 (这是字典列表)的 50 个查询中再次开始运行已返回并附加到query_return_dict,然后它可以运行下一个50 block ,直到查询列表中的所有元素都被查询为止。

另外:

如果有更好的方法来做到这一点,那么线程那就太棒了!

根据要求,这两个列表的格式如下,请记住,其中大约有 850 个:

ls1 = ['34KWR','23SDG','903SD','256DF','41SDA','42DFS',...] <- len 850
ls2 = [{"ity": {"type": "IDE", "butes": [{"ity": {"id": "abc34"}}], "limit": 20}}, ...] <- len 850

最佳答案

如果先压缩,然后 block ,那就更简单了。另外,让 islice 一次获取一个 block 。

from itertools import islice


pairs = zip(unchunked_ls1, unchunked_ls2)

# Get the next 50 elements of pairs and return as a list.
# Because pairs is an iterator, not a list, the return value
# of islice changes each time you call it.
def get_query():
return list(islice(pairs, 50))

# Repeatedly call get_query until it returns an empty list
for query in iter(get_query, []):
# do your query
...

关于python - 让函数等待,直到返回 'n' 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56580734/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com