我對做我想做的事情的最佳方式感到非常困惑。
我想要什么?
- 對燒瓶應用程式的 API 呼叫
- Flask 路由使用 Process 模塊啟動 4-5 個多行程,并使用共享的 Managers().list() 組合結果(在切片的 Pandas 資料幀上)
- 將計算結果回傳給客戶端。
我的實作:
pos_iter_list = get_chunking_iter_list(len(position_records), 10000)
manager = Manager()
data_dict = manager.list()
processes = []
for i in range(len(pos_iter_list) - 1):
temp_list = data_dict[pos_iter_list[i]:pos_iter_list[i 1]]
p = Process(
target=transpose_dataset,
args=(temp_list, name_space, align_namespace, measure_master_id, df_searchable, products,
channels, all_cols, potential_col, adoption_col, final_segment, col_map, product_segments,
data_dict)
)
p.start()
processes.append(p)
for p in processes:
p.join()
我的目錄結構:
- main.py(flask entry point)
- helper.py(contains function where above code is executed & calls transpose_dataset function)
我在運行時遇到的錯誤?運行時錯誤:找不到提供的模塊“ mp_main ”的根路徑。這可能是因為模塊來自不提供檔案名資訊的匯入鉤子,或者因為它是一個命名空間包。在這種情況下,需要明確提供根路徑。
不確定這里發生了什么,當使用 sample.py 檔案呼叫時,管理器串列作業正常 if __name__ == '__main__':
更新:同一段代碼在我的 MacBook 上運行良好,而不是在 Windows 作業系統上。
示例燒瓶 API 呼叫:
@app.route(PREFIX "ping", methods=['GET'])
def ping():
man = mp.Manager()
data = man.list()
processes = []
for i in range(0,5):
pr = mp.Process(target=test_func, args=(data, i))
pr.start()
processes.append(pr)
for pr in processes:
pr.join()
return json.dumps(list(data))
uj5u.com熱心網友回復:
Stack 有一個持續的錯誤阻止我發表評論,所以我只會寫一個答案..
Python 有 2 種(主要)方式來啟動一個新行程:“spawn”和“fork”。Fork 是一個僅在 *nix 中可用的系統命令(閱讀:linux 或 macos),因此 spawn 是 Windows 中的唯一選項。3.8 spawn 將是 MacOS 上的默認設定,但 fork 仍然可用。最大的區別在于 fork 基本上復制了現有行程,而 spawn 啟動了一個全新的行程(就像打開一個新的 cmd 視窗)。關于為什么和如何執行有很多細微差別,但是為了能夠運行您希望子行程使用 spawn 運行的函式,子行程必須使用import主檔案。匯入檔案相當于只是執行該檔案,然后通常將其命名空間系結到變數:import flask將運行 flask/__ini__.py 檔案,并將其全域命名空間系結到變數flask. 然而,通常有代碼僅由主行程使用,不需要在子行程中匯入/執行。在某些情況下,再次運行該代碼實際上會破壞事情,因此您需要防止它在主行程之外運行。考慮到這一點是因為“magic”變數__name__僅等于"__main__"主檔案中的(而不是子行程中或匯入模塊時)。
在您的特定情況下,您正在創建一個 new app = Flask(__name__),它會在您運行服務器之前進行一些驗證和檢查。這是從子行程運行時會絆倒的這些設定/驗證步驟之一。通過不讓它運行來修復它是 imao 更清潔的解決方案,但您也可以通過給它一個不會絆倒的值來修復它,然后永遠不要啟動該輔助服務器(再次通過保護它if __name__ == "__main__":)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/330176.html
