簡體   English   中英

如何使用 Python 在遠程服務器上啟動異步服務器?

[英]How to start asyncio server on remote server with Python?

我有一個運行 Linux 的虛擬服務器,有 8 個內核。 32 GB RAM,另外還有 1 TB。 應該是開發環境。 (測試和生產相同)這是我可以從 IT 獲得的。 服務器只能通過 putty 或直接 tcp/ip 端口通過所謂的跳轉服務器訪問(ssh 是必須的)。

我正在處理的應用程序通過多處理啟動多個進程。 在每個進程中都會啟動一個 asyncio 事件循環,並且在某些情況下會啟動一個 asyncio 套接字服務器。 基本上它是一個低級別的數據流和處理應用程序(不幸的是,還沒有可用的 kafka 或類似技術)。 實時應用程序永遠運行,與用戶沒有或有限的交互(讀取/處理/寫入數據)。

我假設,IPython 是一個選項,但是 - 也許我錯了 - 我認為它會根據客戶端請求啟動新內核,但我需要從沒有用戶交互的主代碼啟動新進程。 如果是這樣,這可以是用於監視應用程序、從中收集數據、向主模塊發送新用戶命令,但不確定如何遠程運行進程和 asyncio 服務器的選項。

我想了解如何在給定的環境中完成這些。 我不知道從哪里開始,有什么選擇。 而且我不太了解 ipython,他們的頁面對我來說還不是很明顯。

請幫幫我! 先感謝您!

經過大量研究和學習,我在我們的“沙箱”環境中找到了一個可能的解決方案。 首先,我不得不將問題拆分為幾個子問題:

  • “遠程”開發
  • 並行化
  • 調度和執行並行代碼
  • 這些“引擎”之間的數據共享
  • 控制這些“引擎”

讓我們詳細看看:

  • 遠程開發意味着您想在筆記本電腦上編寫代碼,但代碼必須在遠程服務器上執行。 簡單的答案是 Jupyter Notebook(或等效解決方案),雖然它有幾個權衡,也有其他解決方案可用,但它部署和使用速度更快,並且依賴性、維護等最少。
  • 並行化:在使用多處理時,iPython 內核遇到了一些挑戰,因此每個必須並行運行的代碼都將編寫在單獨的 Jupyter Notebook 中。 在單個代碼中,我仍然可以使用 eventloop 來獲取異步行為
  • 執行並行代碼:我將使用幾個選項:
    • iPyParallel - 多處理的“解決方法”
    • 造紙廠- 從命令行使用參數執行 JN(可選)
    • 在 Jupyter Notebook 中使用 %%writefile 魔術命令 - 創建可導入文件
    • os 任務調度程序,如 cron。
    • 與事件循環異步
    • 尚無選擇:docker、多處理、多線程、雲(aws、azure、google...)
  • 數據共享:選擇ZeroMQ ,需要時間學習,但比在純套接字上編寫所有內容更簡單更容易。 有替代方案,但具有額外的依賴性,以及一些非常有用的好處(稍后會檢查它們): RabbitMQRedis 消息代理等。 首選 ZMQ 的原因:快速、簡單、優雅,並且只是一個庫。 (已知風險:我們的 IT 更喜歡 RabbitMQ,但這個問題稍后會出現 :-))
  • 控制引擎:現在這個答案很明顯:單獨的 python 代碼(可以作為 JN 代碼進行測試,但很容易變成純 .py 並對其進行調度)。 這個可以通過 ZMQ 套接字與其他模塊通信:健康檢查、發送新參數、命令等......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM