gpt4 book ai didi

python - 将字符串列表传递给 map_async()

转载 作者:行者123 更新时间:2023-12-04 14:42:20 25 4
gpt4 key购买 nike

我有一个关于 map_async 的有趣问题,我无法弄清楚。

我正在使用带有进程池的 python 多处理库。我正在尝试传递要比较的字符串列表和要与使用 map_async() 的函数进行比较的字符串列表

现在我有:

from multiprocessing import Pool, cpu_count
import functools

dictionary = /a/file/on/my/disk
passin = /another/file/on/my/disk

num_proc = cpu_count()

dictionary = readFiletoList(fdict)
dictionary = sortByLength(dictionary)

words = readFiletoList(passin, 'WINDOWS-1252')
words = sortByLength(words)

result = pool.map_async(functools.partial(mpmine, dictionary=dictionary), [words], 1000)

def readFiletoList(fname, fencode='utf-8'):
linelist = list()
with open(fname, encoding=fencode) as f:
for line in f:
linelist.append(line.strip())
return linelist


def sortByLength(words):
'''Takes an ordered iterable and sorts it based on word length'''
return sorted(words, key=len)

def mpmine(word, dictionary):
'''Takes a tuple of length 2 with it's arguments.

At least dictionary needs to be sorted by word length. If not, whacky results ensue.
'''
results = dict()
for pw in word:
pwlen = len(pw)
pwres = list()
for word in dictionary:
if len(word) > pwlen:
break
if word in pw:
pwres.append(word)
if len(pwres) > 0:
results[pw] = pwres
return results



if __name__ == '__main__':
main()

字典和单词都是字符串列表。这导致只使用一个进程而不是我设置的数量。如果我把方括号从变量“单词”中去掉,它似乎会依次遍历每个字符串的字符并造成困惑。

我希望发生的事情是从单词中取出大约 1000 个字符串并将它们传递给工作进程,然后得到结果,因为这是一个可笑的并行任务。

编辑:添加了更多代码以使发生的事情更加清晰。

最佳答案

好吧,其实我自己想出了这个。我只会在这里为可能出现并遇到相同问题的任何其他人发布答案。我遇到问题的原因是因为 map_async 从列表中取出一个项目(在本例中是一个字符串),并将其提供给函数,该函数需要一个字符串列表。所以它基本上将每个字符串视为一个字符列表。 mpmine 的更正代码是:

def mpmine(word, dictionary):
'''Takes a tuple of length 2 with it's arguments.

At least dictionary needs to be sorted by word length. If not, whacky results ensue.
'''
results = dict()
pw = word
pwlen = len(pw)
pwres = list()
for word in dictionary:
if len(word) > pwlen:
break
if word in pw:
pwres.append(word)
if len(pwres) > 0:
results[pw] = pwres
return results

我希望这对面临类似问题的其他人有所帮助。

关于python - 将字符串列表传递给 map_async(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6446568/

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