gpt4 book ai didi

python - 为每个进程划分一个for循环

转载 作者:行者123 更新时间:2023-11-28 18:30:02 25 4
gpt4 key购买 nike

我有这个代码:

def loop():
alphabet = string.digits + string.letters
for key in itertools.product(alphabet, repeat=6):
...

我使用这段代码使用 4 个进程:

if __name__ == '__main__':
jobs = []
for i in range(4):
p = multiprocessing.Process(target=loop)
jobs.append(p)
p.start()

现在.. 这只会运行整个函数 4 次,我需要以某种方式将工作负载分成 4 个并单独运行每个进程,所以在这种情况下我需要将我生成的字符分成 4 个不同的零件.. 例如:

进程 1 工作负载

100,101,102,103

进程 2 工作量

104,105,106,107

进程 3 工作量

108,109,110,111

进程 4 工作量

112,113,114,115

我想你应该明白我想做什么..

我尝试循环遍历并直接丢弃,但是当使用大量字符时它会变得非常慢。如果我有 1,000,000 行并且处理器名称是 4,它将循环 750,000 次而不做任何事情并处理下一个250,000,如果处理器名称是 3.. 它将循环 500,000 次,处理下一个 250k 并以 75000 结束,虽然浪费了很多计算能力:/

最佳答案

您需要预先划分工作量,并在调用Process 时将其传递给您的函数。一般来说,这可能是一个难题,但在您的情况下,这很微不足道,因为您只是生成笛卡尔积——只需切掉第一个字符并单独附加即可。

即不是生成 repeat=6,而是使用 repeat=5 并自己遍历第一个字母的可能性,将每个字母传递给一个单独的进程。

例如:

def loop(first, sequence):
for seq in sequence:
key = first + seq
....

并调用它:

alphabet = ...
for letter in alphabet:
p = Process(target=loop, args=(letter, itertools.product(alphabet, repeat=5))
# etc.

这将为您字母表中的每个字母生成一个进程;你也可以通过传递第一个字符的范围来精确地进行四次分割或其他类似的事情。

关于python - 为每个进程划分一个for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38231420/

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