Python實現php serialize函數

不同的程式語言之間物件的傳遞,就必須把物件序列化為標準格式,比如XML,但更好的方法是序列化為JSON,因為JSON表示出來就是一個字串,可以被所有語言讀取,也可以方便地儲存到磁碟或者通過網路傳輸。

舉例A公司用php撰寫後序列化(物件轉字串)傳送到B公司,而B公司用Python反序列化時要用到。
通常是用在Python編程環境和PHP編程環境,相互之間需要進行數據交換時。

pip3 install phpserialize

導入庫:

import phpserialize

利用dumps 進行序列化(物件轉字串):

phpserialize.dumps(vary)

使用loads 進行反序列化(字串轉物件):

phpserialize.loads(formated_string)

來源1

Python並發編程的三種方式

1.多進程(Process)
2.多協程(Coroutine)
3.多線程(Thread)

1.什麼是CPU密集型計算、IO密集型計算?

bound在這邊是限制的意思。
CPU密集型(CPU-bound):
CPU密集型也叫計算密集型,指的是I/O在很短的時間就可以完成,CPU需要大量的計算和處理。特點是CPU占用率極高。
例如:壓縮/解壓縮、加密/解密、正則表達式搜索。

IO密集型(I/O-bound):
指的是系統運作大部分的狀況CPU在等I/O的讀寫。CPU占用率相對的會較低。
例如:文件處理、爬蟲網路、讀寫數據庫。

小總結:
若程式依賴大量的外部連結(內存、硬碟、網路、DB..等等外部連結)就是IO密集型。若其他的只在CPU運算,則是CPU密集型。

2.多進程、多線程、多協程的對比

這三個是有一個級聯關係的。一個進程中可以包含和啟動多個線程,一個線程中可以啟動多個協程。
協程的概念比較新,在任務中可以啟動很多的協程,但本身都在一個線程中進行。

多進程Process(multiprocessing)

  • 優點:可以利用多核CPU並行運算
  • 缺點:占用資源最多,可啟動數目比線程少
  • 適用於:CPU密集型計算

多線程Thread(threading)

  • 優點:相比進程,更輕量級,占用的資源更少。
    這裡的資源指的是每個線程運行都要包含自己的一些變量存儲,存儲到內存區域
  • 缺點:
    相比進程:多線程只能併發執行,不能利用多CPU(GIL-全局解釋器鎖)
    相比協程:啟動數目有限制,佔用內存資源,有線程切換開銷
  • 適用於:IO密集型計算、同時運型的任務數木要求不多

多協程Coroutine(asycio) – 異步io

  • 優點:內存開銷最少,啟動協程數量最多(甚至到幾萬個)。
  • 缺點:支持的庫有限制(aiohttp vs requests)、代碼實現複雜。
    目前有很多技術是不支持協程的,例如requests這個爬蟲常用的類庫,但在python協程中是不支持的,
    所以要用協程來進行爬蟲的話,可以用aiohttp。
    相比進程、線程,代碼實現複雜,且要考慮的點也較多。
  • 適用於:IO密集型計算、需要超多任務運行、但有現成庫支持的場景。

3.如何根據任務選擇對應的技術?

來源:youtube
蚂蚁学Python【Python并发编程】怎样选择多线程多进程多协程

ubuntu背景執行py方法

主要介紹在linux下使用Terminal來背景執行python的幾種方式,
一個用python寫的監控腳本test.py,一直運行,每5秒、10秒、15秒顯示一次現在時間。

以下為test.py、test2.py、test3.py這三隻同時使用背景來執行的畫面。

執行test.py後,會顯示跳出PID為25270。

# code:utf-8
from datetime import datetime
from time import sleep

while(1):
    count = 1
    sleep(5)
    print(str(count) + " : " + str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')))

再執行一隻test2.py,不會讓原本的test.py停住,還是會繼續執行,並且顯示新的PID。

# code:utf-8
from datetime import datetime
from time import sleep

while(1):
    count = 2
    sleep(10)
    print(str(count) + " : " + str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')))

再執行test3.py。

# code:utf-8
from datetime import datetime
from time import sleep

while(1):
    count = 3
    sleep(15)
    print(str(count) + " : " + str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')))

查詢一下背景運行的程式有哪些。

ps -ef

想停止某隻程式的話,就輸入:

kill PID


kill掉後原本的Terminal會出現已終止某隻程式。

原本的test2.py和test3.py還會繼續執行。

Line bot – 創建Line bot帳號

建立Heroku

首先進到Heroku的帳戶,登入會看到這個畫面

Create new app,創建名字

建立 屬於自己的Line Bot

developers網址

登入後長下面這樣,點選Create a new provider

請輸入一個Providers的名稱之後,點擊Create

左上角是名字,選擇 Create a Messaging API channel

Channel name
Channel description
Category
Subcategory
Email address

以上這些填一填,最下方打勾

創建完成!

將創建好的Line Bot與Heroku進行串接

點選 Messaging API

點選 Auto-reply messages 右邊的 Edit

點選後會跳出一個新頁面,Webhook設置為啟用

點選Channel access token 右方issue,之後會產生一串有英文數字特殊符號的字串,可以先複製起來,後續會使用到。

移動到最上方,選擇Basic settings後,到Channel secret點擊issue,
這串也會跟著改變,也要複製下來,後面會使用到。

編輯程式

填入自己當時複製起來的字串。第一個最長,第二個是比較短的。

# Channel Access Token
line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
# Channel Secret
handler = WebhookHandler('YOUR_CHANNEL_SECRET')

將代碼傳送到Heroku上

到Heroku的官網,依照自己的系統來安裝套件。Heroku官網

安裝成功後我們來登入Heroku,輸入:

heroku login

會自動開啟新網頁視窗請你登入帳號密碼,下方為登入成功畫面,之後就不需要再管這個畫面了。

Git 基本設定以及Push Hearoku

查看目前的設定

git config --list

如果本來就沒有設定git,需要輸入以下指令來進行初始化:

git config –global user.name “你的名字”
git config –global user.email “你的信箱”

在自己的專案創建一個.git檔案(該動作只需要做一次)

git init 

回到資料夾檢查看有沒有出現.git的資料夾,
通常是被隱藏起來,想看的話要把檢視->隱藏的項目打勾

將 git 資料夾與 Heroku作為連接,這邊HEROKU_APP_NAME是要照你當時在Heroku的專案名稱一樣,
如果不同,他則會報錯

heroku git:remote -a {HEROKU_APP_NAME}

下圖為錯誤訊息:

下圖為設定成功的訊息:

然後照下圖方式

指令如下:

git add .
git commit -m "你想輸入的訊息(必填)" 
git push -f heroku master

最後會執行一段時間,成功如下圖

Line Bot 與 Hearoku 綁定

剛剛已經完成將程式碼PUSH到Hearoku了,現在則是讓Line Bot能夠到Hearoku去運行我們想要機器人為我們做的事情。

回到LINE Developers的Messaging API,
選擇 Webhook URL 點擊Edit 將網址貼上去,格式:

https://{HEROKU_APP_NAME}.herokuapp.com/callback

輸入完後點選Verify,成功後就會將剛剛輸入的URL存上去了。

回到Heroku網站,點選Open app,跳出的新網頁就是你的專案網址。

測試自己做的機器人回覆內容

目前機器人是看打什麼字就回復什麼內容,
如果要關閉每次都跳出那感謝訊息,要到回到回應設定,將自動回覆訊息關閉。

clone heroku 的程式碼

有些人開發不一定是使用同一台電腦,clone的指令如下:

git clone https://git.heroku.com/YOUR_HEROKU_APP_NAME.git

YOUR_HEROKU_APP_NAME這串英文改成你的專案名字就可以成功clone下來了。