python中主线程和子线程之间的原子操作

时间:2012-08-07 09:37:57

标签: python multithreading atomic

我的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:我很清楚,我可能不会很好地掌握这个问题的线程编程,如果你相信的话,请你花时间解释一下如果你有时间我的推理错误。

1 个答案:

答案 0 :(得分:4)

  

我应该使用锁来确保子线程中的操作是原子的,这是否确保主线程在我浏览列表时不能改变列表?

是。如果你正确实现了它。

  

或者我应该使用某种旗帜?

“某种标志”==锁定,所以你最好使用线程锁。

重要提示:在我看来,您尝试从stdlib重新实现queue模块,您可能需要查看它。

除了拥有一堆有趣的功能外,还具有线程安全性:

  

queue模块实现多生产者,多消费者队列。当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用。此模块中的Queue类实现了所有必需的锁定语义。