0

さて、私の問題は次のとおりです。3 つの関数をそれぞれ異なる間隔で実行するスクリプトがあります。3 つすべてがリソースを共有します。私がやったことは次のとおりです( res は共有リソースです):

import threading
import thread

lock = threading.Lock()

def f1(res) :
  lock.acquire()
  # do stuff
  time = 10.0 # this one changes each time f1 runs
  lock.release()
  threading.Timer(time,f1).start()

def f2(res) :
  lock.acquire()
  # do stuff
  time = 8.0 # this one changes each time f2 runs
  lock.release()
  threading.Timer(time,f2).start()

def f3(res) :
  lock.acquire()
  # do stuff
  time = 8.0 # this one changes each time f3 runs
  lock.release()
  threading.Timer(time,f3).start()

thread.start_new_thread(f1(res))
thread.start_new_thread(f2(res))
thread.start_new_thread(f3(res))

コードを実行すると、最初のスレッド (f1) のみが永久に実行され、実際にはタイマーに設定された時間を待たずに実行されます。誰かが私に何が間違っているのか、どうすれば正しくできるのかを説明してくれませんか?

前もって感謝します。

4

2 に答える 2

0

以下のコードは私にとってはうまくいきます。インが犯人#do stuffではないと確信していますか?f1

import threading
import thread

lock = threading.Lock()

def f1(res) :
    lock.acquire()
    print "F1"
    lock.release()
    threading.Timer(1.0,f1, [res]).start()

def f2(res) :
    lock.acquire()
    print "F2"
    lock.release()
    threading.Timer(2.0,f2, [res]).start()

def f3(res) :
    lock.acquire()
    print "F3"
    lock.release()
    threading.Timer(3.0,f3, [res]).start()

thread.start_new_thread(f1, (res,))
thread.start_new_thread(f2, (res,))
thread.start_new_thread(f3, (res,))
于 2013-09-02T13:56:36.837 に答える