3

我想知道是否有人可以將我指向java中的一個簡單的python多處理模塊。用於Python的python pool.map/多處理器的等效代碼

我有一個簡單的並行處理場景(其中沒有2個進程交互):取一個數據集並將其拆分爲12,並將java方法應用於12個數據集,收集結果並將它們加入到某種列表中相同的順序。

Java是一個「專業」語言似乎有多個庫和方法 - 誰可以幫助這個Java新手上手?

我想用最少的代碼來做到這一點 - 正如我所說我的要求非常簡單。

更新: how to do multiprocessing in java, and what speed gains to expect?

這似乎表明線程是要走的路。我希望我別無選擇,只能闖入一堆鎖(雙關),等待我的船駛過。然而,簡單的例子是受歡迎的。

+0

你是說像HTTP ://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html? – CBredlow

+0

可能 - 對於多處理模塊,我不必考慮線程和內容。我簡單地將我的函數映射到列表中的數據塊上。至少在我看來,這裏的併發實用程序似乎更復雜。也許有一個簡單的應用程序會讓我開始。 – pythOnometrist

+0

http://stackoverflow.com/questions/4208208/java-util-concurrent-examples-tutorial-and-code這也有幫助 - 但如果有更簡單的東西會感激它。 – pythOnometrist

回答

3

沒有完全兼容的類,但ExecutorService爲您提供了實現它所需的一切。

特別是沒有功能的CallableCollection地圖和等待的結果,但你可以輕鬆地構建一個Collection<Callable<T>>Callable<T>Collection<T>的,然後就打電話invokeAll,它返回你一個List<Future<T>>

(如果你想模仿一些從multiprocessing.Pool其他功能,則需要執行循環submit代替並建立自己的收藏的東西來等待,但map是簡單的。)

+0

這正是我所需要的 - 我會明天測試它,並可能會回來一些問題。 – pythOnometrist

+0

@pythOnometrist:如果你想做任何不平凡的事情,我會建議學習執行者和期貨是如何工作的,而不是試圖在他們之上構建Python'multiprocessing' API。你可能想用Python自己的'concurrent.futures'庫(或[backport](https://pypi.python.org/pypi/futures),如果你使用的是2.x)來獲取首先想法。無論如何,很多代碼實際上更簡單。但是,如果您必須使用Java,那麼編寫慣用Java會比試圖將Java用作非常糟糕的Python更快樂...... – abarnert