learn python in 30 min - 3

47
Learn Python in 30 min -3 cmj 1

Upload: chia-hao-tsai

Post on 13-Aug-2015

231 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Learn python in 30 min - 3

Learn Python in 30 min -3cmj

1

Page 2: Learn python in 30 min - 3

接下來要教大家的是

2

Page 3: Learn python in 30 min - 3

3

Page 4: Learn python in 30 min - 3

‧ 沒有控制,你就不能

‧ 同時操作兩台以上機器

‧ 機器間的互動行為

‧ 擬人操作

4

Page 5: Learn python in 30 min - 3

‧ 遠端控制有很多種

‧ 遠端指令 (Remote Command)

‧ 遠端桌面 (Remote DeskTop)

5

Page 6: Learn python in 30 min - 3

‧ 遠端控制有很多種

‧ 遠端指令 (Remote Command)

‧ 遠端桌面 (Remote DeskTop)

‧ 但這不是我們要的

6

Page 7: Learn python in 30 min - 3

‧ 除非

‧ 你想要利用程式得到 UI 訊息

‧ 你想要確定 I/O 功能正常

‧ 或者你是真的要測試遠端桌面可以用

7

Page 8: Learn python in 30 min - 3

‧ 所以我們需要的是:遠端操作機器,就跟在 local 一樣

‧ 遠端物件 (Remote Object)

‧ 操作的是程式碼

‧ 程式碼在 remote 執行 === local 執行

8

Page 9: Learn python in 30 min - 3

‧ 像是

‧ 開檔案

‧ 判斷檔案在不在

‧ 確定現在使用者身份

‧ ⋯ etc

9

Page 10: Learn python in 30 min - 3

這樣的好處?

10

Page 11: Learn python in 30 min - 3

遠端機器 === 你程式的參數

11

Page 12: Learn python in 30 min - 3

所以你需要的是...

12

Page 13: Learn python in 30 min - 3

‧ 定義一個函數:邏輯依舊,但是

‧ 機器變成參數的一部分

‧ 你可以一口氣在 n (n>2) 台機器上跑

‧ 輪流在個別機器執行

‧ 結果回存在執行的機器上

13

Page 14: Learn python in 30 min - 3

14

Page 15: Learn python in 30 min - 3

‧ PyRO (Python Remote Object)

‧ 好用的第三方套件

‧ 部署在支援 Python 的機器上

‧ 幾乎平台無關

15

Page 16: Learn python in 30 min - 3

‧ 兩個部分

‧ Server - 發出指令

‧ 指定特定一台 client 的特定 object

‧ 給予參數執行並且得到結果

‧ Client - 接受指令

‧ 公開很多 object

‧ 等待指令執行

16

Page 17: Learn python in 30 min - 3

‧ Server

‧ 我想要 client A 的 whoAmI 指令

‧ 表示我想呼叫 client A 的 whoAmI method

‧ Client

‧ 公開 whoAmI 指令

‧ 等著 server 說:我想要知道你是誰

17

Page 18: Learn python in 30 min - 3

‧ Client Side 有以下重點

‧ 必須只能 exposed object

‧ Server 只能呼叫 object 的 method

‧ 要注意生命週期∼

18

Page 19: Learn python in 30 min - 3

‧ Client Side 有以下重點

‧ 必須只能 exposed object

‧ Server 只能呼叫 object 的 method

‧ 要注意生命週期∼ 開發的人腦海要有這句話

19

Page 20: Learn python in 30 min - 3

Client Side

20

Page 21: Learn python in 30 min - 3

Client Side

21

公開的物件

Page 22: Learn python in 30 min - 3

‧ 執行 client.py 之後

‧ 會隨機產生一個聽 localhost 的 socket

‧ 有相對應的 URI

‧ Server 靠這個 URI 來判斷是哪一個 client

22

Page 23: Learn python in 30 min - 3

run client.py

23

Page 24: Learn python in 30 min - 3

‧ Server Side 有以下重點

‧ 確定這個 client exposed obj 的 URI 是對的

‧ 了解 client exposed 的 object 有啥能力

(method)

‧ dir 在這時候是有用的 !

24

Page 25: Learn python in 30 min - 3

Server Side

25

Page 26: Learn python in 30 min - 3

26

執⾏行的結果

⽤用 dir 來偷看能⼒力

Page 27: Learn python in 30 min - 3

但是這樣很不方便

27

Page 28: Learn python in 30 min - 3

‧ 每次都要記錄 client 的 URI:沒人這麼無聊

‧ 每次都只能在 localhost:我就是要多台機器互動

28

Page 29: Learn python in 30 min - 3

其實 Document 有教你

29

Page 30: Learn python in 30 min - 3

‧ 注意看 Pyro4.Daemon / Pyro4.register 的 help

‧ 表示 client 有自己的名稱:通常是IP:PORT

‧ 相對的,object 也有相對也有特定的 URI

‧ 就叫做 PYRO:OBJECT_NAME@IP:PORT

30

Page 31: Learn python in 30 min - 3

重要的是...

31

Page 32: Learn python in 30 min - 3

已經有人包成函示庫了

32

Page 33: Learn python in 30 min - 3

33

Page 34: Learn python in 30 min - 3

‧ 我已經寫成一個類別

‧ 你選擇需要 exposed object 就會處理後續工作,包含

‧ 聽特定的 Port

‧ exposed 成固定的 FORMAT

34

Page 35: Learn python in 30 min - 3

35

新增/刪除物件

Page 36: Learn python in 30 min - 3

36

實際註冊物件/執⾏行 client

Page 37: Learn python in 30 min - 3

37

實際註冊物件

Page 38: Learn python in 30 min - 3

38

執⾏行 client 程式

Page 39: Learn python in 30 min - 3

‧ 這樣,你就可以根據

‧ 定義得 FORMAT 來使用 Remote Object

‧ 像是

‧ FORMAT = PYRO:obj_{name}@IP:PORT

‧ name 是原本 class 該有的名稱

‧ Pyro4.Proxy(“PYRO:obj_{name}@{host}:{port}”)

39

Page 40: Learn python in 30 min - 3

這樣,一切又變成函數了>.^

40

Page 41: Learn python in 30 min - 3

又不免俗的

41

Page 42: Learn python in 30 min - 3

‧ Pyro 真的博大精深

‧ 不過不用讀完 document

‧ 相對的,需要思考到底需要哪些遠端操作

‧ 而這些是程式可以完成的

42

Page 43: Learn python in 30 min - 3

不然我也希望有程式可以幫我寫扣

43

Page 44: Learn python in 30 min - 3

簡單的 Client/Server

‧ Client 可以完成一件功能

‧ exposed 一個可以使用的 object

‧ 不能是 Slides 上的範例

‧ 固定一個 object 的 URI

‧ Server 可以

‧ 根據 client 的 IP,就可以使用 remote object

44

Page 45: Learn python in 30 min - 3

複雜的 Client/Server

‧ 多個 Client / 一個 Server 架構

‧ Client

‧ Exposed object:目前機器的運行時間 (Second)

‧ Exposed object:目前剩餘的使用空間 (MB)

‧ Server

‧ 給定所有 Client IP

‧ 找到運行最久的機器

‧ 全部機器的剩餘空間

45

Page 46: Learn python in 30 min - 3

‧ Ref

‧ Pyro [https://pythonhosted.org/Pyro4/]

46

Page 47: Learn python in 30 min - 3

Thanks for your attentions

47