1. 程式人生 > >Python基礎-分散式程序 Master/Worker模型

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