我對python隊列有疑問。如何知道隊列中的特定任務是否完成?
我寫了一個線程類,其run()方法執行隊列。
import threading
import Queue
def AThread(threading.Thread):
def __init__(self,arg1):
self.file_resource=arg1
threading.Thread.__init__(self)
self.queue=Queue.Queue()
def __myTask(self):
self.file_resource.write()
''' Method that will access a common resource
Needs to be synchronized.
Returns a Boolean based on the outcome
'''
def run():
while True:
cmd=self.queue.get()
#cmd is actually a call to method
exec("self.__"+cmd)
self.queue.task_done()
#The problem i have here is while invoking the thread
a=AThread()
a.queue.put("myTask()")
print "Hai"
AThread的相同實例(= AThread())將加載任務從不同的位置的隊列。
因此,底部的print語句應該等待通過上面的語句添加到隊列中的任務,並等待一個確定的時間段,並且還會收到執行任務後返回的值。
有沒有一種簡單的方法來實現這一目標?我已經搜索了很多關於此的內容,請仔細閱讀此代碼並提供建議。
爲什麼python的獲取和釋放鎖不在類的實例上。在上述場景中,AThread的實例a和b不需要同步,但是當應用獲取和釋放鎖定時,myTask對a和b的實例都同步運行。
請提供建議。
爲什麼每個線程都有一個隊列? – RedBaron 2012-08-03 06:11:46
我已經修改了代碼。這對於等待b = AThread(「b.txt」)的= Athread(「a.txt」)來說是不合適的,因爲它們對myTask方法的調用將在兩個不同的文件上進行。因此Athread(「a.txt」)只會被調用一次,其他所有對myTask的調用都會進入隊列。 – 2012-08-03 07:20:34
很少使用線程,但通常隊列是全局的並且具有要完成的任務。有一個線程池(一個線程隊列),它擁有線程。一個線程管理器將循環直到任務隊列不爲空 - 它會喚醒,從task_queue中取出一個任務,從線程池中取出一個線程。將任務分配給線程。去睡覺。如果線程池中沒有線程,它將休眠並重試。線程本身 - 執行並返回結果後,將自己添加到線程池中。線程將獨立工作,但程序不會退出,直到完成所有任務。 – RedBaron 2012-08-03 07:33:43