2015-04-05 62 views
1

我正在學習Python的多線程。我的任務是一個排隊系統。這是我的代碼:Python線程:鎖定while語句

lock = thread.allocate_lock() 
while len(Queue)>0: 
    lock.acquire() 

    # get item from Queue 
    item = Queue[0, :] 
    Queue = np.delete(Queue, 0, 0) 

    lock.release() 

    # process item 
    # some code here 

的問題是,隊列可能會檢查它的長度和應用鎖定後後修改。

所以,我需要這樣的東西(這顯然是不合法的代碼):

while lock.acquire(), len(Queue)>0: # not working 
    item = Queue[0, :] 
    Queue = np.delete(Queue, 0, 0) 

    lock.release() 

如何最好地解決這個問題?

回答

1

這個怎麼樣?

lock = thread.allocate_lock() 
    while true: 
     lock.acquire() 
     if len(Queue) <= 0: 
     lock.release() 
     break 

     # get item from Queue 
     item = Queue[0, :] 
     Queue = np.delete(Queue, 0, 0) 

     lock.release() 

     # process item 
     # some code here 
+0

好點。通常我不使用'break'語句。但在這裏他們使用顯着的好處。謝謝 – BerndGit 2015-04-05 20:52:37