python_分散式進程中遇到的問題

来源:https://www.cnblogs.com/loveMessi/archive/2019/04/26/10774619.html
-Advertisement-
Play Games

看文檔學習分散式進程中遇到了一下問題,文檔裡面例題是python2.X,我用的python3.x,就出現了一下莫名奇妙的問題,最終版代碼先呈上: taskManager.py taskWorker.py 先運行 taskManager.py 伺服器端代碼,再快速運行 taskWorker.py 客戶 ...


看文檔學習分散式進程中遇到了一下問題,文檔裡面例題是python2.X,我用的python3.x,就出現了一下莫名奇妙的問題,最終版代碼先呈上:

taskManager.py

 1 # coding:utf-8
 2 # taskManager.py  for  windows  伺服器端
 3 
 4 import queue
 5 from multiprocessing.managers import BaseManager
 6 from multiprocessing import freeze_support
 7 # 任務個數
 8 task_number = 10
 9 # 定義收發隊列
10 task_queue = queue.Queue(task_number);
11 result_queue = queue.Queue(task_number);
12 def get_task():
13     return task_queue
14 def get_result():
15     return result_queue
16 #創建類似的QueueManager:
17 class QueueManager(BaseManager):
18     pass
19 def win_run():
20     # Windows 下綁定調用介面不能使用lambda,所以只能先定義函數再綁定
21     QueueManager.register('get_task_queue',callable = get_task)
22     QueueManager.register('get_result_queue',callable=get_result)
23     #綁定埠並設置驗證口令,windows下需要填寫IP地址,Linux下不填預設為本地 ip地址為本地ip地址
24     manager = QueueManager(address = ('192.xxx.xx.xxx',8001),authkey =b'qiye')
25     # 啟動
26     manager.start()
27     try:
28         # 通過網路獲取任務隊列和結果隊列
29         task = manager.get_task_queue()
30         result = manager.get_result_queue()
31         #添加任務
32         for url in ["ImageUrl_"+str(i) for i in range(10)]:
33             print('put task %s ...'%url)
34             task.put(url)
35         print('try get result...')
36         for i in range(10):
37             print('result is %s' %result.get(timeout=10))
38     except:
39         print('Manager error')
40     finally:
41         # 一定要關閉,否則會報管道未關閉的錯誤
42         manager.shutdown()
43 
44 if __name__=='__main__':
45     # Windows 下多進程可能會有問題,添加這句可以緩解
46     freeze_support()
47     win_run()

taskWorker.py

 1 # coding:utf-8
 2 import time
 3 from multiprocessing.managers import BaseManager
 4 # 創建類似的 QueueManager:
 5 class QueueManager(BaseManager):
 6     pass
 7 #第一步: 使用QueueManager註冊用於獲取Queue的方法名稱
 8 QueueManager.register('get_task_queue')
 9 QueueManager.register('get_result_queue')
10 #第二步:連接到伺服器:
11 server_addr = '192.xxx.xx.xxx'
12 print('Connect to server %s...'%server_addr)
13 #埠和驗證口令註意保持與伺服器進程保持一致:
14 m = QueueManager(address=(server_addr,8001),authkey=b'qiye')
15 #從網路連接
16 m.connect()
17 #第三部:獲取Queue的對象:
18 task = m.get_task_queue()
19 result = m.get_result_queue()
20 #第四步:從task隊列獲取任務,並把結果寫入result隊列:
21 while(not task.empty()):
22     image_url = task.get(True,timeout = 5)
23     print('run task download %s ...'%image_url)
24     time.sleep(1)
25     result.put('%s--->success'%image_url)
26 #處理結束
27 print('worker exit.')

先運行 taskManager.py 伺服器端代碼,再快速運行 taskWorker.py 客戶端代碼 運行結果依次如下:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天早上六點半左右微信群里就看到張隊發的關於.NET Spark大數據的鏈接https://devblogs.microsoft.com/dotnet/introducing net for apache spark/ ,正印證了“微軟在不斷通過.NET Core補齊各領域開發,真正實現一種語言的跨 ...
  • 原文: C#中DataTable中的Compute方法使用收集 Compute函數的參數就兩個:Expression,和Filter。 Expresstion是計算表達式,關於Expression的詳細內容請看這裡“http://msdn2.microsoft.com/zh-cn/library/s ...
  • 下麵我們通過以下的簡單的SQL語句即可實現數據的批量導入,代碼如下: Bulk insert id From 'G:\文檔\test.txt' With ( fieldterminator=',', rowterminator='\n')註意:1) bulk insert 為Sql server 中 ...
  • 一、流編輯器 sed 與命令 sed Linux 中,常使用流編輯器 sed 進行文本替換工作。與常使用的互動式編輯器(如vim)不同,sed 編輯器以批處理的方式來編輯文件,這比互動式編輯器快得多,可以快速完成對數據的編輯修改。 一般來說,sed 編輯器會執行以下操作: 1)一次從輸入中讀取一行數 ...
  • shell腳本編程 編譯器,解釋器 編程語言: 機器語言,彙編語言,高級語言 靜態語言:編譯型語言 強類型(變數) 事先轉換成可執行格式 C,C++,JAVA,C# 動態語言:解釋型語言,on the fly 弱類型 邊解釋邊執行 ASP,ASP.NET,PHP,SHELL,PYTHON,PERL ...
  • IIO DATA ACCESS IIO數據獲取 只有兩種方法可以使用IIO框架訪問數據; 通過sysf通道進行一次性捕獲,或通過IIO字元設備進行連續模式(觸發緩衝)。 One-shot capture:單次獲取 一次性數據捕獲通過sysfs介面完成。 通過讀取與通道對應的sysfs條目,您將僅捕獲 ...
  • RT-Flash是一個專為基於NXP i.MX RT系列晶元的產品量產而設計的工具,其功能與官方MfgTool2工具類似,但是解決了MfgTool2工具在實際量產使用中的一些痛點 ...
  • 1.下載Yii2 https://www.yiichina.com/download 2.將解壓後的文件放在指定的位置,這裡是/home/www/yii/ 3.安裝apache2 3.啟動和查看apache2 啟動: 查看: 4.配置虛擬主機 www.feiquan.com 5.配置hosts文件( ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...