Upload
chia-hao-tsai
View
231
Download
1
Embed Size (px)
Citation preview
Learn Python in 30 min -3cmj
1
接下來要教大家的是
2
3
‧ 沒有控制,你就不能
‧ 同時操作兩台以上機器
‧ 機器間的互動行為
‧ 擬人操作
4
‧ 遠端控制有很多種
‧ 遠端指令 (Remote Command)
‧ 遠端桌面 (Remote DeskTop)
5
‧ 遠端控制有很多種
‧ 遠端指令 (Remote Command)
‧ 遠端桌面 (Remote DeskTop)
‧ 但這不是我們要的
6
‧ 除非
‧ 你想要利用程式得到 UI 訊息
‧ 你想要確定 I/O 功能正常
‧ 或者你是真的要測試遠端桌面可以用
7
‧ 所以我們需要的是:遠端操作機器,就跟在 local 一樣
‧ 遠端物件 (Remote Object)
‧ 操作的是程式碼
‧ 程式碼在 remote 執行 === local 執行
8
‧ 像是
‧ 開檔案
‧ 判斷檔案在不在
‧ 確定現在使用者身份
‧ ⋯ etc
9
這樣的好處?
10
遠端機器 === 你程式的參數
11
所以你需要的是...
12
‧ 定義一個函數:邏輯依舊,但是
‧ 機器變成參數的一部分
‧ 你可以一口氣在 n (n>2) 台機器上跑
‧ 輪流在個別機器執行
‧ 結果回存在執行的機器上
13
14
‧ PyRO (Python Remote Object)
‧ 好用的第三方套件
‧ 部署在支援 Python 的機器上
‧ 幾乎平台無關
15
‧ 兩個部分
‧ Server - 發出指令
‧ 指定特定一台 client 的特定 object
‧ 給予參數執行並且得到結果
‧ Client - 接受指令
‧ 公開很多 object
‧ 等待指令執行
16
‧ Server
‧ 我想要 client A 的 whoAmI 指令
‧ 表示我想呼叫 client A 的 whoAmI method
‧ Client
‧ 公開 whoAmI 指令
‧ 等著 server 說:我想要知道你是誰
17
‧ Client Side 有以下重點
‧ 必須只能 exposed object
‧ Server 只能呼叫 object 的 method
‧ 要注意生命週期∼
18
‧ Client Side 有以下重點
‧ 必須只能 exposed object
‧ Server 只能呼叫 object 的 method
‧ 要注意生命週期∼ 開發的人腦海要有這句話
19
Client Side
20
Client Side
21
公開的物件
‧ 執行 client.py 之後
‧ 會隨機產生一個聽 localhost 的 socket
‧ 有相對應的 URI
‧ Server 靠這個 URI 來判斷是哪一個 client
22
run client.py
23
‧ Server Side 有以下重點
‧ 確定這個 client exposed obj 的 URI 是對的
‧ 了解 client exposed 的 object 有啥能力
(method)
‧ dir 在這時候是有用的 !
24
Server Side
25
26
執⾏行的結果
⽤用 dir 來偷看能⼒力
但是這樣很不方便
27
‧ 每次都要記錄 client 的 URI:沒人這麼無聊
‧ 每次都只能在 localhost:我就是要多台機器互動
28
其實 Document 有教你
29
‧ 注意看 Pyro4.Daemon / Pyro4.register 的 help
‧ 表示 client 有自己的名稱:通常是IP:PORT
‧ 相對的,object 也有相對也有特定的 URI
‧ 就叫做 PYRO:OBJECT_NAME@IP:PORT
30
重要的是...
31
已經有人包成函示庫了
32
33
‧ 我已經寫成一個類別
‧ 你選擇需要 exposed object 就會處理後續工作,包含
‧ 聽特定的 Port
‧ exposed 成固定的 FORMAT
34
35
新增/刪除物件
36
實際註冊物件/執⾏行 client
37
實際註冊物件
38
執⾏行 client 程式
‧ 這樣,你就可以根據
‧ 定義得 FORMAT 來使用 Remote Object
‧ 像是
‧ FORMAT = PYRO:obj_{name}@IP:PORT
‧ name 是原本 class 該有的名稱
‧ Pyro4.Proxy(“PYRO:obj_{name}@{host}:{port}”)
39
這樣,一切又變成函數了>.^
40
又不免俗的
41
‧ Pyro 真的博大精深
‧ 不過不用讀完 document
‧ 相對的,需要思考到底需要哪些遠端操作
‧ 而這些是程式可以完成的
42
不然我也希望有程式可以幫我寫扣
43
簡單的 Client/Server
‧ Client 可以完成一件功能
‧ exposed 一個可以使用的 object
‧ 不能是 Slides 上的範例
‧ 固定一個 object 的 URI
‧ Server 可以
‧ 根據 client 的 IP,就可以使用 remote object
44
複雜的 Client/Server
‧ 多個 Client / 一個 Server 架構
‧ Client
‧ Exposed object:目前機器的運行時間 (Second)
‧ Exposed object:目前剩餘的使用空間 (MB)
‧ Server
‧ 給定所有 Client IP
‧ 找到運行最久的機器
‧ 全部機器的剩餘空間
45
Thanks for your attentions
47