1

以下のコードで定義されているクラス PROCESS (ここには示されていない他の関数によって呼び出されるたびに実行されます) から x 分ごとにデータをサンプリングして、これをスケジュールしようとしています。X 分ごとにスケジューラ関数を実行しています。 MAIN 関数によって開始され、関数 minmax_job によって実行されます。

ただし、私の関数 minmax_job は、グローバル変数の配置などについて試行錯誤した i の初期値を認識していないようですが、i = 0 (初期) であることをまだ認識していません。

i = 0
atc,otc,tssc = 0,0,0
atf,otf,tssf = False,False,False


class Process(threading.Thread):
    def __init__(self, buffer3, broadcast_server):
        threading.Thread.__init__(self)
        self.setDaemon(True)
        self.buffer3 = buffer3
        self.factory = broadcast_server

    def run(self):
        today = datetime.now()
        global time_of_last_run
        global atv1,atv2,atv3,otv1,otv2,otv3,tssv1,tssv2,tssv3
        global atf,otf,tssf
        global atc,otc,tssc


        if self.buffer3.startswith('kitchen aquarium: temp:'):
            self.temp = self.buffer3.replace('kitchen aquarium: temp:','')
            self.factory.broadcast("Aquarium temperature %s" % self.temp)

            if atc == 1 and atf:
                atv1 = float(self.temp)
                atf = False
            elif atc == 2 and atf:
                atv2 = float(self.temp)
                atf = False 
            elif atc == 3 and atf:
                atv3 = float(self.temp)
                atf = False


def minmax_job():

    global atv1,atv2,atv3,otv1,otv2,otv3,tssv1,tssv2,tssv3
    global atf,otf,tssf
    global atc,otc,tssc,i

    if i == 3:
        i = 0
        atc = 0

    if i < 4:
        atc = atc + 1 
        atf = True
        i = i + 1


if __name__ == '__main__':

    minmax_scheduler = Scheduler()
    minmax_scheduler.add_interval_job(minmax_job, seconds=10)
    minmax_scheduler.start()
4

2 に答える 2

0

このデモが示すように、i をグローバルとして宣言し、外側のスコープで値を割り当てる必要があります

global i
i=0

def rabbit():
    global i
    print "rabbit ",i


#main here
if __name__ == '__main__':
    rabbit()
于 2013-02-19T12:06:03.403 に答える