有了這個代碼,您可以創建具有優先權的線程通過調用join
。線程將被鎖定,直到前面的線程完成。請記住,您無法在尚未開始的線程上調用連接。 task1
到task5
是要調用的實際過程(您必須定義的常規過程)。
要使task4在task3完成時完成,請創建一個全局變量並使task4監視該變量。 task3必須設置task4必須等待的值。這取決於你如何做到這一點,但沒有內置的機制。如果你不想要全局變量,那麼使用許多着名的Python機制來避免這種情況(例如,每個可調用對象可能是一個實例的綁定方法)。
class CustomThread(threading.Thread):
def __init__(group=None, target=None, name=None, prev=(), args=(), kwargs={}):
super(CustomThread, self).__init__(group, target, name, args, kwargs)
self.prev_threads = prev
def run():
for prev in self.prev_threads:
prev.join()
super(CustomThread, self).run()
try:
thread1 = CustomThread(target=task1)
thread2 = CustomThread(prev=[thread1], target=task2)
thread3 = CustomThread(prev=[thread2], target=task3)
thread4 = CustomThread(prev=[thread2], target=task4)
thread5 = CustomThread(prev=[thread3,thread4], target=task5)
#start the threads in this order or you'll get a RuntimeError
thread1.start()
thread2.start()
thread3.start()
thread4.start()
thread5.start()
except:
print " unable to run "
在任務2之後和任務5之前放置嘗試。在任務5之前,請記住加入它們。 – HuStmpHrrr 2014-10-29 14:46:13
非常感謝,我會盡力的。 – PhuongHoang 2014-10-29 16:27:56