import?math
import?time
from?threading?import?Thread
class?SquareRootCaluatotor:
????"""This?class?spawn?a?separate?thread?to?calculate?a?bunch?of?square?roots?,and?checks?in?it?once?a?second?until?it?finishes"""
????def?__init__(self,target):
????????"""Turn?on?the?calculator?thread?and,while?waiting?for?it?to?finish,periodically?monitor?its?progress"""
????????self.result?=?[]
????????counter?=?self.CalculatorThread(self,target)
????????print("Turning?on?the?calculator?thread")
????????counter.start()
????????while?len(self.result)<target:
????????????print("%d?square?roots?calculated?so?far."?%len(self.result))
????????????time.sleep(1)
????????print("calculated?%s?square?root;the?last?one?is?sqrt(%d)=%f"?%(target,len(self.results),self.result.results[-1]))
class?CalculatorThread(Thread):
????"""A?separate?thread?which?actually?does?the?calculations."""
????def?__init__(self,controller,target):
????????"""Set?up?this?thread,including?makeing?it?a?daemon?thread?so?that?the?script?can
????????end?without?waiting?for?this?thread?to?finish"""
????????Thread.__init__(self)
????????self.controller?=?controller
????????self.target?=?target
????????self.setDaemon(True)
????def?run(self):
????????"""Calculate?square?roots?for?all?numbers?between?1?and?the?target,?inclusive."""
????????for?i?in?range(1,self.target+1):
????????????self.controller.results.append(math.sqrt(i))
????if?__name__?==?'main':
????????import?sys
????????limit?=?None
????????if?len(sys.argv)?>1:
????????????limit?=?sys.argv[1]
????????????try:
????????????????limit?=?int(limit)
????????????except?ValueError:
????????????????print("Usage:%s?[number?of?square?roots?to?calculate"
????????????????%?sys.argv[0])
????????SquareRootCaluatotor(limit)求教:1在給SquareRootCaluatotor類實例后運行,總是提示無CalculatorThread屬性,請問這是為什么?????????????2 這個文件的正確運行步驟是什么?我給SquareRootCaluatotor賦變量運行是否正確?
添加回答
舉報
0/150
提交
取消