1. 程式人生 > >python 學習 -- 分散式程序

python 學習 -- 分散式程序

伺服器端:
import random,time,queue

from multiprocessing.managers import BaseManager

# 傳送任務的佇列
task_queue = queue.Queue()
# 接收結果的佇列
result_queue = queue.Queue()

class QueueManager(BaseManager):
    pass

# 定義一個返回task_queue的函式
def return_task_queue():
    global task_queue
    return task_queue

# 定義一個返回結果佇列的函式
def return_result_queue():
    global result_queue
    return result_queue

# 測試函式
def test():
    # 將兩個queue註冊到網路上
    QueueManager.register('get_task_queue', callable=return_task_queue)
    QueueManager.register('get_result_queue', callable=return_result_queue)
    # 繫結埠,同時設定驗證碼
    manager = QueueManager(address=('127.0.0.1', 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, 100)
        print('Put task %d...' % n)
        task.put(n)

    # 從result佇列中取出結果
    print("Try get results...")
    for i in range(10):
        r = result.get(timeout=10)
        print("Result: %s" % r)

    # 關閉(之前一直阻塞)
    manager.shutdown()
    print("master exit.")

# main函式
if __name__=="__main__":
    test()

測試端:

import time,sys,queue
from multiprocessing.managers import BaseManager

class QueueManager(BaseManager):
    pass

# 從網路上獲取queue ,註冊時候提供名字
QueueManager.register('get_task_queue')
QueueManager.register('get_result_queue')

# 連線到伺服器
server_addr = '127.0.0.1'
print('Connect to server %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()
for i in range(10):
    try:
        n = task.get(timeout=1)
        print('run task %d*%d...' % (n,n))
        r = '%d * %d = %d' %(n,n,n*n)
        time.sleep(1)
        result.put(r)
    except BaseException:
        print('error')
print("worker exit.")


相關推薦

python 學習 -- 分散式程序

伺服器端:import random,time,queue from multiprocessing.managers import BaseManager # 傳送任務的佇列 task_queue = queue.Queue() # 接收結果的佇列 result_qu

Python學習--課本程序練習(周更)

tor bar 工作日 刷新 () 一次 ima pos else 1.繪制正方形螺旋線 import turtle turtle.setup(600,300,200,200) turtle.pensize(1) turtle.color(‘green‘) i=0

Python學習程序運行完發送郵件提醒

直接 登錄 word 提醒 地址 install python3 ont world 有時候我們運行一個需要跑很長時間的程序,不管是在雲主機還是本地主機上運行,我們都不可能一直守在電腦面前等。所以想到使用郵件來通知提醒。 示例代碼如下 # -*- coding: utf-8

Python學習程序併發寫入同一檔案

最近學習了Python的多程序,想到我的高德API爬蟲那個爬取讀寫速度我就心累,實在是慢,看到多程序可以充分利用CPU核數我就開始完善我的程式碼,不過過程是艱辛的,在此之中出現了很多問題,其中最大的問題是爬取的資料是正確的,但是讀寫到Excel中卻開啟是空,想了半天也沒解決,腦子笨沒辦法,不過我

python 實現分散式程序

前言 本來在學習廖雪峰老師的分散式程序模組,但是使用其程式碼執行,發現了各種報錯,通過自己的解決能順利跑通,現跟大家分享一下。 本文是通過學習廖雪峰老師的教程進行的記錄,僅用於個人學習記錄,請大家支援原創。 作業系統 由於目前僅試驗了windows系統下的開發

Python基礎-分散式程序 Master/Worker模型

分散式程序 Python的multiprocessing模組不但支援多程序,其中的managers子模組還支援吧多程序分佈到多臺機器上。 Demo 執行示例 服務端 #!/usr/bin/env python3 # -*- coding

Python筆記——分散式程序

在Thread和Process中,應當優選Process,因為Process更穩定,而且,Process可以分佈到多臺機器上,而Thread最多隻能分佈到同一臺機器的多個CPU上。 Python的multiprocessing模組不但支援多程序,其中managers子模組還

Python學習第一章:第一次的親密接觸之初識程序(二)

inpu alt blog put 分享 裏的 hello 格式 img 上次我們講到print(Hello Word)及變量的使用,下面我們繼續: 比如我們想在程序中實現格式化輸出如: 那麽我們我們就要進行簡單的格式化定義,一個很簡單的input語法實現,案例如下:

python學習(5)寫一個二分算法的程序

AR 小結 == inpu env bre elif 進行 span 把之前學習的做一個小結。之前看二分查找法,只能是似而非地看懂大概。現在用這麽多天的知識積累已經可以自己寫了。 而且在算法書的基礎上,把需要找的數字做一個人機互動操作。 另外,初步接觸到了 __name__

Python學習之編寫登陸認證程序

inpu file 存儲 提示 用戶鎖定 通過 允許 odin 判斷 需求: 讓用戶輸入用戶名密碼 認證成功後顯示歡迎信息 輸錯三次後退出程序 可以支持多個用戶登錄 (提示,通過列表存多個賬戶信息) 用戶3次認證失敗後,退出程序,再次啟動程序嘗試登錄時,還是鎖定狀態(提示:

5.Python學習筆記:綜合練習[購物車程序]

phone python IV 技術分享 pri pen user code 練習 salary=5000 flag=True user_buy1=[] msg=‘‘‘ --------歡迎光臨----------- salary=5000 1.iphon

python學習:購物車程序

打印 opp ase true choice car pri while 購物車 購物車程序 product_list = [ (‘mac‘,9000), (‘kindle‘,800), (‘tesla‘,900000), (‘python book

20180821 Python學習筆記:如何獲取當前程序路徑

con awl tab style onf getcwd nbsp 為知筆記 想要 20180821 Python學習筆記:如何獲取當前程序路徑啟動的腳本的路徑為:D:\WORK\gitbase\ShenzhenHouseInfoCrawler\main.py當前腳本的路徑

python學習總結(一),第一個python程序的編寫

程序代碼 spa 編碼 結構 編輯 下載地址 utf 修改編碼 general 1. python是一種解釋性,編譯型,互動型的語言,面向對象,動態數據類型的高級程序設計語言。 1.1 交互式:意味著可以在一個提示符直接交互執行你寫的程序。 1.2 解釋型:意味著開發過程中

python學習:一次簡單的購物車程序實例

isdigit python學習 python form compute 啟動 index computer nbsp 需求: 1、啟動程序後,讓用戶輸入余額,然後打印商品列表 2、允許用戶根據商品編號購買商品 3、用戶選擇商品後,檢查余額是否足夠,足夠加入購物車直接扣款,

python學習之面向對象程序設計的一些思考

函數 對象 程序 以及 有時 使用實例 狀態 情況 讓其 將屬於一類的對象放在一起:     如果一個函數操縱一個全局變量,那麽兩者最好都在類內作為特性和方法實現。    不要讓對象過於親密:     方法應該只關心自己實例的特性,讓其他實例管理自己的狀態。 簡單就好:  

Python學習筆記【Supervisor】:使用Supervisor監控Tornado程序

Linux常見應用服務配置模式nginx和supervisor:採用主配置檔案+專案配置檔案 安裝(如果使用pip安裝注意看是否需要指定使用python2版本)   第一步:在Linux中使用apt-get 指令安裝 sudo apt-get install supervisor

python 學習第二十五天(程序的呼叫,程序池)

程序的呼叫 方法一: from multiprocessing import Process import time def f(name): time.sleep(1) print('hello', name,time.ctim

python 學習第二十二天(程序和執行緒)

程序 程序就是一個程式在一個數據集上的一次動態執行過程。 程序一般由程式、資料集、程序控制塊三部分組成。 我們編寫的程式用來描述程序要完成哪些功能以及如何完成; 資料集則是程式在執行過程中所需要使用的資源; 程序控制塊用來記錄程序的外部特徵,描述程序的執行變化過程,系統可以利

Python學習第35天之程序part1

一、程序的理論基礎 1、程序就是一個程式在一個數據集上的一次動態執行過程。是用來描述程式執行過程的虛擬概念。程序的概念起源於作業系統,程序是作業系統最核心的概念,作業系統其它所有的概念都是圍繞程序來的。程序一般由程式、資料集、程序控制塊三部分組成。我們編寫的程式用來描述程序要完成哪些功能以及如何完成;資料集