【发布时间】:2011-07-24 21:20:39
【问题描述】:
我正在尝试找到一种方法来使以下算法在多个内核上进行处理,但我的观点并不好。我认为使用在多个进程之间共享的锁定迭代器并不是最有效的方式。
def sortCharset(set):
_set = ""
for c in set:
if c not in _set:
_set += c
set = _set
del _set
set = list(set)
set.sort()
return "".join(set)
def stringForInt(num, set, length):
setLen = len(set)
string = ""
string += set[num % setLen]
for n in xrange(1,length):
num //= setLen
string += set[num % setLen]
return string
def bruteforce(set, length, raw = False):
if raw is False:
set = sortCharset(set)
for n in xrange(len(set) ** length):
yield stringForInt(n, set, length)
简短说明: 该代码用于创建所有可能的组合 来自一组字符,即破解密码。 (当然不是我的意图,只是一些 Py 训练。;-)
在多核上运行此算法的好方法是什么?
【问题讨论】:
-
感谢您的编辑。我仍然没有得到 StackExchange 格式。
-
而不是
charset = sortCharset(charset),只需使用charset = sorted(set(charset))。 (不需要del _set,因为_set是本地的。)另外,not raw比raw is False更好。 -
谢谢,sorted(.. 很好!我一直都在倾听关于如何让代码变得更好的建议。
-
另外,作为一般原则,不要调用变量
set,因为set是内置类型,替换它只会导致混乱。 -
我认为您可能正在寻找 itertools.permutations - 查看文档,看看它是否在做您想要的。 docs.python.org/library/itertools.html#itertools.permutations
标签: python multiprocess