Python基礎-分散式程序 Master/Worker模型
分散式程序
Python的multiprocessing模組不但支援多程序,其中的managers子模組還支援吧多程序分佈到多臺機器上。
Demo
執行示例
服務端
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 分佈程序-服務端
import random, time, queue
from multiprocessing.managers import BaseManager
# 傳送任務的佇列
task_queue = queue.Queue()
# 接收任務的佇列
result_queue = queue.Queue()
# 從 BaseManager繼承的 QueueManager
class QueueManager(BaseManager):
pass
def get_task_queue():
global task_queue
return task_queue
# 把兩個Queue都註冊到網路上,callable引數關聯了 Queue 物件
QueueManager.register("get_task_queue", callable = get_task_queue)
QueueManager.register("get_result_queue", callable = lambda:result_queue)
# 繫結埠5000,設定驗證碼為"abc"
manager = QueueManager(address=("", 5000), authkey=b"abc")
# 啟動 Queue
manager.start()
# 獲取通過網路訪問的 Queue 物件
task = manager.get_task_queue()
result = manager.get_result_queue()
# 放幾個任務進去
for i in range(10):
n = random.randint(0, 10000)
print("Put task %d" % n)
task.put(n)
# 從result佇列中讀取結果
print("Try get result" )
for i in range(10):
r = result.get(timeout = 10)
print("結果 %s" % r)
# 關閉
manager.shutdown()
print("manage exit")
客戶端
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 分佈程序-客戶端
import time, sys, queue
from multiprocessing.managers import BaseManager
# 建立類似的 QueueManager
class QueueManager(BaseManager):
pass
# 由於這個QueueManager只從網路上獲取Queue,所以註冊時只提供名字
QueueManager.register("get_task_queue")
QueueManager.register("get_result_queue")
# 連線到伺服器,即執行 task_master.py 的機器
server_addr = "127.0.0.1"
print("連線伺服器 %s" % server_addr)
# 埠和驗證碼注意和伺服器一致
m = QueueManager(address=(server_addr, 5000), authkey=b'abc')
# 從網路連線:
m.connect()
# 獲取Queue的物件
task = m.get_task_queue()
result = m.get_result_queue()
# 從 task 佇列中取任務,並把結果寫入result佇列
for i in range(10):
try:
n = task.get(timeout = 1)
print("run task %d * %d" %d (n, n))
r = "%d * %d = %d " % (n, n, n * n)
time.sleep(1)
result.put(r)
except Queue.Empty:
print("task queue is empty")
Window無法正常執行,例如
D:\PythonProject>Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\ProgramData\Anaconda3\lib\multiprocessing\spawn.py", line 99, in spawn_main
new_handle = reduction.steal_handle(parent_pid, pipe_handle)
File "C:\ProgramData\Anaconda3\lib\multiprocessing\reduction.py", line 82, in steal_handle
_winapi.PROCESS_DUP_HANDLE, False, source_pid)
OSError: [WinError 87] 引數錯誤。
python task_worker.py
連線伺服器 127.0.0.1
Traceback (most recent call last):
File "task_worker.py", line 23, in <module>
m.connect()
File "C:\ProgramData\Anaconda3\lib\multiprocessing\managers.py", line 489, in connect
conn = Client(self._address, authkey=self._authkey)
File "C:\ProgramData\Anaconda3\lib\multiprocessing\connection.py", line 487, in Client
c = SocketClient(address)
File "C:\ProgramData\Anaconda3\lib\multiprocessing\connection.py", line 614, in SocketClient
s.connect(address)
ConnectionRefusedError: [WinError 10061] 由於目標計算機積極拒絕,無法連線。
這個簡單的Master/Worker模型有什麼用?其實這就是一個簡單但真正的分散式計算,把程式碼稍加改造,啟動多個worker,就可以把任務分佈到幾臺甚至幾十臺機器上,比如把計算n*n的程式碼換成傳送郵件,就實現了郵件佇列的非同步傳送。
看來這個demo暫時無法看效果了,可惜
相關推薦
Python基礎-分散式程序 Master/Worker模型
分散式程序 Python的multiprocessing模組不但支援多程序,其中的managers子模組還支援吧多程序分佈到多臺機器上。 Demo 執行示例 服務端 #!/usr/bin/env python3 # -*- coding
python基礎小程序
python基礎小程序========================================猜大小的遊戲#!/usr/bin/python# -*- coding: UTF-8 -*-import randoms = int(random.uniform(1,100))#print(s)m = 1i
python基礎之程序協程
在編寫程序時,一般先測試單程序程式碼,待程式驗證成功後再將其改為多程序,多程序每個程序各用一套獨立的記憶體空間。 使用繼承類的方式建立程序: from multiprocessing import Process import time import random import os cl
python 實現分散式程序
前言 本來在學習廖雪峰老師的分散式程序模組,但是使用其程式碼執行,發現了各種報錯,通過自己的解決能順利跑通,現跟大家分享一下。 本文是通過學習廖雪峰老師的教程進行的記錄,僅用於個人學習記錄,請大家支援原創。 作業系統 由於目前僅試驗了windows系統下的開發
Python基礎30_程序
一. 背景知識 程序就是進行中的程式 1. 程序的概念起源於作業系統, 是作業系統最核心的概念, 作業系統的其他所有內容都是圍繞程序的概念展開的 作業系統的作用: (1). 隱藏醜陋複雜的硬體介面, 提供良好的抽象介面 (2).管理,排程程序, 並且將多個程序對硬體的競爭變得有序 2. 多道技術: 產生背景:
python 學習 -- 分散式程序
伺服器端:import random,time,queue from multiprocessing.managers import BaseManager # 傳送任務的佇列 task_queue = queue.Queue() # 接收結果的佇列 result_qu
Python筆記——分散式程序
在Thread和Process中,應當優選Process,因為Process更穩定,而且,Process可以分佈到多臺機器上,而Thread最多隻能分佈到同一臺機器的多個CPU上。 Python的multiprocessing模組不但支援多程序,其中managers子模組還
python基礎-守護程序、守護執行緒、守護非守護並行
守護程序 1、守護子程序 主程序建立守護程序 其一:守護程序會在主程序程式碼執行結束後就終止 其二:守護程序內無法再開啟子程序,否則丟擲異常:AssertionError: daemonic processes are not allowe
python分散式程序模型
分散式程序:Process程序分佈到多臺機器上 Python的multiprocessing模組不但支援多程序,其中managers子模組還支援把多程序分佈到多臺機器上。可以寫一個服務程序作為排程者,將任務分佈到其他多個程序中,依靠網路通訊進行管理。 另外值得注意的是,
python基礎作業------模擬實現一個ATM + 購物商城程序
setting water 轉賬 atm 結算 pan auth hide use 模擬實現一個ATM + 購物商城程序 作業需求: 額度 15000或自定義 實現購物商城,買東西加入 購物車,調用信用卡接口結賬 可以提現,手續費5% 每月22號出賬單,每月10號為還款日
Python基礎(16)_面向對象程序設計(類、繼承、派生、組合、接口)
特征 abc 有效 相同 現實 父類 student 需求 ict 一、面向過程程序設計與面向對象程序設計 面向過程的程序設計:核心是過程,過程就解決問題的步驟,基於該思想設計程序就像是在設計一條流水線,是一種機械式的思維方式 優點:復雜的問題的簡單化,流程化
Python 基礎 - Day 2 Assignment - ShoppingCart 購物車程序
工資 購物車程序 bsp 購物車 要求 shopping pin 打印 ssi 作業要求 1、啟動程序後,輸入用戶名密碼後,如果是第一次登錄,讓用戶輸入工資,然後打印商品列表 2、允許用戶根據商品編號購買商品 3、用戶選擇商品後,檢測余額是否夠,夠就直接扣款,不夠就提醒 4
Python基礎之 Django模型
use Coding python 變更 安裝 uname odin sage end 本章節主要是包括通過Python安裝Mysql驅動(mysqlclient),通過Django創建app,更新數據庫模型。 1.安裝 mysql 驅動。如果你沒安裝 mysql 驅動,可
python基礎27 -----python進程終結篇-----IO模型
非阻塞 緩存 代碼原理 linux系統 並不會 async process 而不是 拷貝數據 一、IO模型 1、IO模型分類 1.阻塞IO--------blocking IO 2.非阻塞IO------nonblocking IO 3. 多路復
python基礎之IO模型
需要 ech 列表 window 網絡連接 其它 ron 都是 listen IO模型分類 五種IO Model blocking IO 阻塞IO nonblocking IO 非阻塞IO IO multiplexing I
Python 基礎 - Day 4 Assignment - 員工信息表程序
mic 基礎 程序 soft 滿足 strong href 需求 pan 作業要求及初步思路 員工信息表程序,實現增刪改查操作: ① 可進行模糊查詢,語法至少支持下面3種: select name,age from staff_table where age > 2
Python基礎知識進階(五---2)----程序基本結構、簡單分支、異常處理、三大實例分析、基本循環結構、通用循環構造方法、死循環嵌套循環、布爾表達式
方法 算法 嵌套 構造方法 決策樹 輸入 繼續 實例 控制 上一篇隨筆寫的內容有點多了,決定分成兩節,不然自己看的時候也頭疼。 三者最大實例: 分支結構可以改變程序的控制流,算法不再是單調的一步步順序執行。 假設:以找出三個數字中最大者的程序設計為例。
並發模型(二)——Master-Worker模式
string 程序 分配任務 之一 size void con .exe || Master-Worker模式是常用的並行模式之一,它的核心思想是,系統有兩個進程協作工作:Master進程,負責接收和分配任務;Worker進程,負責處理子任務。當Worker進程將子任
Python開發入門14天集訓營·第1章Python基礎語法-編寫登陸認證程序
password put mod 基礎語 aps author one display 退出程序 作業題目: 編寫登陸認證程序 作業需求: 基礎需求: 讓用戶輸入用戶名密碼 認證成功後顯示歡迎信息 輸錯三次後退出程序 升級需求: 可以支持多個用戶登錄 (提示,通過列表
Python基礎之python代碼程序內存回收機制
一個 常用 如果 自動 不起作用 python代碼 內存回收 清除 方式 我們知道我們定義一個了一個變量,我們如果不需要這個變量時,需要釋放該變量的運行內存,所以我們可以通過兩種常用兩種方式去釋放這個內存。我們看下以下兩個例子: 1.python回收機制 nav = 1 n