python并行计算:分割键空间给每个节点一个工作范围

2024-09-29 01:38:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题很难解释,因为我的数学不是很好,但我会尽量弄清楚。在

我试图用python编写一个集群,它将生成给定一个字符集的单词(即小写:aaaa,aaab,aaac,…,zzzz),并对它们进行各种操作。 我正在搜索如何计算,给定字符集和节点数,每个节点应该在什么范围内工作(即:node1:aaaaaaazzz,node2:baaaczzz,node3:daaa-ezzz,…)。有没有可能做一个算法来计算这个,如果有,我怎么用python实现呢?在

我真的不知道怎么做,所以如果有任何帮助我将不胜感激


Tags: 节点集群数学单词小写我会字符集aaaa
2条回答

从字符串中计算出一个小整数的任何方法都适合集群。例如,用md5计算一个散列,并查看它的一个字节:

import hashlib

s = "aaac"
num_nodes = 5 # or whatever
m = hashlib.md5(s)
node = ord(m.digest()[0]) % num_nodes

print node  # prints 2

这并不能保证所有的字符串都是均匀分布的,但会很接近。在

你应该能够把你的单词当作基数奇怪的数字。例如,假设您有一个..z作为您的字符集(26个字符),4个字符串,并且您希望平均分布在10台机器之间。然后总共有26^4个字符串,所以每台机器得到26^4/10个字符串。第一台机器将得到字符串0到26^4/10,下一台26^4/10到26^4/5,等等

要将数字转换为字符串,只需使用字符集作为数字,以26为基数编写数字。所以0是'aaaa',26^4/10=2*26^3+15*26^2+15*26+15是'cppp'。在

相关问题 更多 >