【发布时间】:2018-12-05 01:15:54
【问题描述】:
我需要让一些排列异步运行,以减少生成列表中所有可能排列的文件所需的时间。我曾多次尝试对此进行多重处理,但均未成功。
要求的结果:
包含以下格式的字符串列表的文件: PRE + JOINEDPERMUTATION
其中 PRE 来自列表“前缀”
从 "".join(x) 中找到 JOINEDPERMUTATION
其中 x 是从排列(项目、重复)中找到的
ITEMS 是我需要检索排列的值列表
REPETITIONS 我希望在 range(8) 重复中找到此列表的每个排列
items=['a','b','c']
prefix=['one','two','three']
from itertools import permutations
from multiprocessing import Pool
pool=Pool(14)
def permutations(pre, repetitions, items):
PERMS = [ pre + "".join(x) for x in permutations(items, repetitions) ]
return PERMS
def result_collection(result):
results.extend(result)
return results
results=[]
args = ((pre, repetitions, items) for pre in prefix for repetitions in range(5))
for pre, repetitions, items in args:
pool.apply_async(permutations, (pre, repetitions, items), callback=result_collection)
pool.close()
pool.join()
with open('file.txt','a',encoding='utf-8') as file:
file.writelines(results)
我本身并没有收到错误,但是在使用列表运行该程序后,ITEMS 有 50 个元素,PREFIXES 有 5 个; 8 小时后仍未完成,我不知道如何进一步调查。
还有一个快速的备用查询我是否认为在多处理模块中基本上没有用 'pool.map' ,因为它只会利用一个工人?为什么会在这里?
【问题讨论】:
标签: python multiprocessing generator itertools pool