我有代码,可以创建独特的元素组合。有6种类型,每种类型大约有100种。所以有100 ^ 6种组合。必须计算每个组合,检查相关性,然后丢弃或保存。
代码的相关位如下所示:
def modconffactory():
for transmitter in totaltransmitterdict.values():
for reciever in totalrecieverdict.values():
for processor in totalprocessordict.values():
for holoarray in totalholoarraydict.values():
for databus in totaldatabusdict.values():
for multiplexer in totalmultiplexerdict.values():
newconfiguration = [transmitter, reciever, processor, holoarray, databus, multiplexer]
data_I_need = dosomethingwith(newconfiguration)
saveforlateruse_if_useful(data_I_need)
现在这需要很长时间,这很好,但现在我意识到这个过程(进行配置然后计算供以后使用)一次只使用我的8个处理器内核中的一个。
我一直在阅读有关多线程和多处理的内容,但我只看到不同进程的示例,而不是如何多线程处理一个进程。在我的代码中,我调用了两个函数:'dosomethingwith()'和'saveforlateruse_if_useful()'。我可以将它们分成不同的进程并将它们同时运行到for循环中,对吗?
但是for循环本身呢?我可以加快这个过程吗?因为那是消耗时间的地方。 (< - 这是我的主要问题)
有骗子吗?比如编译成C然后自动进行os多线程?
答案 0 :(得分:0)
你可以用这种方式运行你的功能:
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
p = Pool(5)
print(p.map(f, [1, 2, 3]))
https://docs.python.org/2/library/multiprocessing.html#using-a-pool-of-workers