我在我的python程序中有一個列表在某些場合獲取新項目(它是一個消息隊列使用者)。然後,我有一個線程,每隔幾分鐘檢查一次,看看列表中是否有任何內容,如果有,那麼我想對每個項目執行一個操作,然後清空列表。python主線程和子線程之間的原子操作
現在我的問題:我應該使用鎖定以確保子線程中的操作是原子操作,並確保主線程無法在列表中通過列表時更改列表?
或者我應該使用某種標誌?
僞代碼使我的問題更清晰。
的子線程:
def run(self):
while 1:
if get_main_thread_list() is not empty:
do_operations()
empty_the_list()
sleep(30)
主線程:
list = []
def on_event(item):
list.add(item)
def main():
start_thread()
start_listening_to_events()
我希望這是我的問題更清晰,資源或評論任何環節都顯得歡迎! PS:我很清楚,如果你相信如此,那麼請你花一些時間來解釋我的推理有什麼問題,如果你有時間的話,我可能不會很好地掌握線程編程。
撇開。如果你想要一個「隊列」,但你不需要線程安全,你可能真的想要['collections.deque'](http://docs.python.org/library/collections.html#collections.deque)而不是'queue.Queue';主要區別在於後者用鎖定來包裝前者 – SingleNegationElimination 2012-08-07 12:03:35