2011-03-28 75 views
15

我有n(通常是n < 10,但它應該縮放)在不同機器上運行的進程,並使用RabbitMQ通過amqp進行通信。進程通常是長時間運行的,可以用任何語言實現(儘管大部分是java/python)。蟒蛇中的數據流計算

每個進程都需要多個輸入(數字/字符串)並生成多個輸出(也只是數字或字符串)。執行進程異步發生:在其輸入隊列上發送消息並等待輸出隊列觸發回調。

理想情況下,用戶指定某些輸入和所希望的輸出和系統應:

  • 檢測需要哪些過程和生成依賴圖
  • 拓撲排序的圖形,並執行它,節點轉換將需要事件驅動

如果節點的輸入已準備就緒,則允許節點觸發每個分支的並行性。現在我可以假設沒有周期,但最終會有周期(例如,兩個過程可能需要迭代,直到輸出不再變化)。

這應該是(數據)流程編程(discussed here before)中的一個已知問題,我想避免重新發明車輪。我更喜歡python解決方案,搜索導致TrellisPypes。網格不再開發,但似乎支持週期,而pype不支持。也不知道如何積極開發pypes。

更多搜索reveal a whole list of event based programming frameworks,其中沒有一個我特別瞭解。當然有工作流程環境,如TavernaKNIME,但似乎矯枉過正。

有沒有人有處理這類問題的經驗或提到的庫?

編輯:我發現其他庫是:

+0

那你到底選擇? – elviejo79 2016-04-19 01:23:18

+1

我最終只是在rabbitmq – dgorissen 2016-04-21 09:10:46

+0

上滾動了自己的薄層......也許在不久的將來Dataflow/beam將是python的一個很好的解決方案。 http://stackoverflow.com/questions/35264441/what-is-apache-beam – elviejo79 2016-04-21 12:45:52

回答

1

的底線是,如果你能重塑只需少量幾行代碼(幾百)即可完成etely理解和可以證明,然後做到這一點。

這是一個抽象區域,在給定一些基本基礎工具的情況下,使用這些抽象並不是很難實現。 RabbitMQ就是這樣的工具。 Node.js是另一個。周圍有許多庫實現有用的方法來管理數據流,工作流,有限狀態機等,但它們有很多重疊並且往往不完整。可能最初的開發人員只是爲了克服他最初的問題而建立起來的,由於這種編程不是那麼受歡迎,所以沒有足夠的時間來保持發展。

對於按照受歡迎程度對所有可能的解決方案進行排名,選擇最受歡迎的解決方案以及將其付諸實踐(當然要分享您的工作),還有很多需要說明的內容。