我正在尝试在 Mac OSX 上的 python (2.7.8) 中使用多处理。在阅读了 Velimir Mlaker 对这个问题的回答后,我能够使用 multiprocessing.Pool() 来多处理一个非常简单的函数,但它不适用于我的实际函数。我得到了正确的结果,但它是按顺序执行的。我相信问题在于我的函数循环了一个 music21.stream() ,它类似于一个列表,但对音乐数据具有特殊的功能。我相信music21流不能被腌制,所以我可以使用一些多处理替代池吗?我不介意结果是否乱序返回,如有必要,我可以升级到不同版本的 python。我已经包含了多处理任务的代码,但没有包含它调用的 stream_indexer() 函数。谢谢!
import multiprocessing as mp
def basik(test_piece, part_numbers):
jobs = []
for i in part_numbers:
# Each 2-tuple in jobs has an index <i> and a music21 stream that
# corresponds to an individual part in a musical score.
jobs.append((i, test_piece.parts[i]))
pool = mp.Pool(processes=4)
results = pool.map(stream_indexer, jobs)
pool.close()
pool.join()
return results