gpt4 book ai didi

Python 多处理 - 返回一个字典

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

我想并行化一个函数,该函数在字典中返回扁平化的值列表(称为“键”),但我不明白如何获得最终结果。我试过:

def toParallel(ht, token):
keys = []
words = token[token['hashtag'] == ht]['word']
for w in words:
keys.append(checkString(w))
y = {ht:keys}

num_cores = multiprocessing.cpu_count()
pool = multiprocessing.Pool(num_cores)

token = pd.read_csv('/path', sep=",", header = None, encoding='utf-8')
token.columns = ['word', 'hashtag', 'count']
hashtag = pd.DataFrame(token.groupby(by='hashtag', as_index=False).count()['hashtag'])

result = pd.DataFrame(index = hashtag['hashtag'], columns = range(0, 21))
result = result.fillna(0)

final_result = []
final_result = [pool.apply_async(toParallel, args=(ht,token,)) for ht in hashtag['hashtag']]

toParallel 函数应该返回一个以 hashtag 作为键的字典和一个键列表(其中键是 int)。但是如果我尝试打印 final_result,我只会得到

bound method ApplyResult.get of multiprocessing.pool.ApplyResult object at 0x10c4fa950

我该怎么做?

最佳答案

final_result = [pool.apply_async(toParallel, args=(ht,token,)) for ht in hashtag['hashtag']]

您可以使用 Pool.apply() 并立即获得结果(在这种情况下您不需要 multiprocessing 嘿嘿,该功能只是为了完整性) 或使用 Pool.apply_async() 后接 Pool.get()Pool.apply_async()异步

像这样:

workers = [pool.apply_async(toParallel, args=(ht,token,)) for ht in hashtag['hashtag']]
final_result = [worker.get() for worker in workers]

或者,您也可以使用 Pool.map(),它将为您完成所有这些工作。

无论如何,我建议您阅读 the documentation仔细。


附录: 在回答这个问题时,我假设 OP 使用的是某些 Unix 操作系统,例如 Linux 或 OSX。如果您使用的是 Windows,则一定不要忘记使用 if __name__ == '__main__' 来保护您的父进程/工作进程。这是因为 Windows 缺少 fork(),因此子进程从文件的开头开始,而不是像 Unix 那样在 fork 点开始,因此您必须使用 if 条件来引导它。参见 here .


ps:这是不必要的:

num_cores = multiprocessing.cpu_count()
pool = multiprocessing.Pool(num_cores)

如果您调用 multiprocessing.Pool() 时不带参数(或 None),它已经创建了一个 CPU 数量大小的工作池。

关于Python 多处理 - 返回一个字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39141236/

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