0

だから私はスレッドを持っています:

import threading, time, serial, logging

class SerialThread(threading.Thread):

    # SerialThread class construcor
    def __init__(self, sleep):
        self.sleep = sleep
        threading.Thread.__init__(self,name = "SerialThread")
        self.setDaemon(1)

    # SerialThread method
    def run(self):

        # Do forever
        while 1:   

            # Sleep afther every loop
            time.sleep(self.sleep)
            print 'Doing some work!'

    def setSleep(self, sleep):
         self.sleep = sleep

そして、私のメインスレッドで私は:

serialThread = SerialThread(60)
serialThread.start()

def changeSleep():
    serialThread.setSleep(80)

私はメインコードからこのスレッドを開始しています。しかし、今、番号を変更したいときはself.sleepどうすればよいですか? 私はこのシンプルで素朴なソリューションを試して、スレッドクラスでメソッドを作成し、呼び出されたときにスリープ時間を設定しました。どうやらこれは私が期待したようには機能しませんでした。良い例は大歓迎です。

編集:前に試したコードを追加

編集:self.sleep最初に設定したように、常に60であるため、呼び出した後でも機能しませんserialThread.setSleep(80)

編集:これは関連性があるとは思いませんでしたが、フラスコでWebサービスを作成してserialThread.setSleep(80)おり、フラスコルートにアクセスすることによって呼び出されます。したがって、フラスコは別のスレッドでも実行されると思います。そのため、serialThread.setSleep(80)実際にはメインスレッドから呼び出されません...

コード:

@app.route('/api/setConf', methods=['POST'])
def setConf():

    serialThread.setSleep(config.interval)

    return 'ok'
4

1 に答える 1

0

次の本体コード(およびスレッドコードの便利なプリント)で動作します:

serialThread = SerialThread(3)
serialThread.start()

def changeSleep():
    serialThread.setSleep(6)

time.sleep(15)
changeSleep()
time.sleep(15)

出力:

sleeping for 3
Doing some work!
sleeping for 3
Doing some work!
sleeping for 3
Doing some work!
sleeping for 3
Doing some work!
sleeping for 3
Doing some work!
sleeping for 6
Doing some work!
sleeping for 6
Doing some work!
sleeping for 6
于 2012-07-24T20:30:07.153 に答える