2014年7月12日 星期六

[Python] 養不起寵物只好養電子雞,Python多執行緒(Thread)之測試

        話說友人最近養了隻小貓,上次去他家玩深深被動物的靈性所吸引,但是我自己住的地方又小又亂,完全不適合養貓...只好開始思索其他動物的可能。狗要散步不行,魚又太沒有互動,兔子大便很臭關在房間我絕對自己窒息,想來想去剛好前幾天發現有人在養刺蝟,馬上被刺蝟的萌樣吸引啊!! 也太可愛了!! 於是乎開始了搜尋如何飼養刺蝟的文章,但是看來看去,照顧動物真的不容易啊...哀...既然無法飼養真的動物,又想滿足回家有小動物撲上來打招呼的幻想,只好開始思考電子雞之路(目標是電子女僕)


        但是電子雞並不是單純的程式碼,而是有自己生命的程式(就像初音不是軟體一樣),有自己獨立的生命週期,這時候就不能用一般的程式編寫方式,而是要導入多執行緒(Thread)--(http://zh.wikipedia.org/zh-tw/%E7%BA%BF%E7%A8%8B) 根據WIKI的解釋,Thread就是電腦執行的最小單位,一個程式通常會使用一個執行緒。多執行緒的功用就是讓程式編成之後,能夠同時執行多比獨立的程式。

import datetime
import time
from threading import Thread
##導入thread物件
class monocell(Thread):
##要將物件轉成多執行緒物件的方式就是在創立物件時繼承Thread
lifeCost = 1
##每單位生命消耗單位
def __init__(self,name,life):
##當物件實體化時自動執行的部分name,life是初始化時可以輸入名字和血量
Thread.__init__(self)
##繼承Thread物件後,初始化時必須載入父物件的初始程式
self.birthTime = datetime.datetime.now()
##用datatime這個物件來設定出生的時間
self.name = name
self.life = life
def run(self):
##run()方法對應的是start()方法,當多執行緒物件被start()時,會自動執行run()方法裡的程式
print self.name, "is borned, and birth on", self.birthTime
##列印出生時間
heart(self.name, self.life, self.lifeCost)
##執行心臟方法,參數是物件的名字、血量跟消耗量
def heart(name,life,lifecost):
while True:
if life <= 0:
##當血量小於等於零時觀地執行緒
print name,"is died"
thread.exit()
print name, "remain", life,"HP"
time.sleep(1)
每次執行迴圈時休息1秒
life -= lifecost
血量隨時間減少
cellMicky = monocell("micky",10)
cellMini = monocell("mini",20)
cellLucky = monocell("Lucky",15)
##看我一次建立三個單細胞生物,每隻都有不同的名字和血量
cellMicky.start()
cellMini.start()
cellLucky.start()
##三個一起跑,目前生物之間沒有互動行為
'''
micky is borned, and birth on 2014-07-11 23:35:39.284000
micky remain 10 HP
mini is borned, and birth on 2014-07-11 23:35:39.284000
mini remain 20 HP
Lucky is borned, and birth on
2014-07-11 23:35:39.284000
Lucky remain 15 HP
mini micky remain remain 919 HP HP
Lucky remain 14 HP
minimicky remainremain 18 HP8 HP
Lucky remain 13 HP
minimicky remainremain 7 17 HPHP
Lucky remain 12 HP
minimicky remainremain 16 HP
6 HP
Lucky remain 11 HP
minimicky remain remain 15 HP
5 HP
Lucky remain 10 HP
mickymini remainremain 144 HP
HP
Lucky remain 9 HP
mickymini remainremain 133 HP
HP
Lucky remain 8 HP
minimicky remainremain 212 HP
HP
Lucky remain 7 HP
mickymini remainremain 1 HP11 HP
Lucky remain 6 HP
mickymini remainis died 10
HP
Lucky remain 5 HP
mini remain 9 HP
Lucky remain 4 HP
mini remain 8 HP
Lucky remain 3 HP
mini remain 7 HP
Lucky remain 2 HP
mini remain 6 HP
Lucky remain 1 HP
mini remain 5 HP
Lucky is died
mini remain 4 HP
mini remain 3 HP
mini remain 2 HP
mini remain 1 HP
mini is died
'''
view raw gistfile1.py hosted with ❤ by GitHub

感想:真的好宅喔QQ      
本文主要參考資源:http://www.tutorialspoint.com/python/python_multithreading.htm
圖片來源:http://www.niusnews.com/index.php/main/view/158


2 則留言: