Java中与Python的pool.map/ Multiprocessing相当的功能是什么?

5
我想知道是否有人能够指导我如何在Java中寻找与Python的multiprocessing模块相对应的简单等效方法。
我的并行处理场景很简单(没有两个进程之间的交互):将数据集分为12个部分,对这12个数据集应用一个Java方法,收集结果并将它们按照相同的顺序连接到某种列表中。
作为一种"专业"语言,Java似乎有多个库和方法——有谁能帮助这个Java新手入门呢?
我希望尽可能少编写代码——就像我说的那样,我的要求非常直接简单。
更新: 如何在Java中进行多处理以及可以期望的速度增益? 这似乎表明线程是正确的选择。我想我别无选择,只能深入一堆锁定(意外的双关语),等待我的船启航。但仍然欢迎一些简单的示例。

你的意思是像这样的吗?http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html? - CBredlow
可能 - 使用多进程模块,我不必考虑线程和其他东西。我只需将函数映射到列表中数据块上即可。这里的并发工具似乎更加复杂,至少对我来说是这样。也许有一个简单应用的示例可以让我入门。 - pythOnometrist
这个链接很有帮助 - 但如果有更简单的东西会更感激。 - pythOnometrist
http://ricardozuasti.com/2012/java-concurrency-examples-parallel-data-processing/使用concurrent类可以帮我完成一部分工作。 - pythOnometrist
1个回答

4
没有完全兼容的类,但ExecutorService提供了您实现它所需的一切。
特别地,没有将Callable映射到Collection并等待结果的函数,但是您可以轻松地将Callable<T>Collection<T>构建为Collection<Callable<T>>,然后只需调用invokeAll即可,它会返回一个List<Future<T>>
(如果您想模拟multiprocessing.Pool中的其他一些功能,则需要循环使用submit并构建自己的要等待的内容集合。但是map很简单。)

这正是我所需要的 - 我明天会测试它,如果有问题可能会再联系您。 - pythOnometrist
@pythOnometrist:如果你想做一些非平凡的事情,我建议你学习如何使用执行器和未来对象,而不是试图在它们之上构建Python的multiprocessing API。你可能想先尝试使用Python自己的concurrent.futures库(或者回溯如果你在2.x上),以便更好地掌握这些思想。实际上,很多代码都可以更简单地实现。但是,如果你必须使用Java,写出符合惯用法的Java代码会比试图将Java用作非常糟糕的Python更加令人愉快... - abarnert
我不明白。这怎么是多进程?ExecutorService不是只为线程而设计的吗? - Kallzvx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接