gpt4 book ai didi

python - 变量循环和同步

转载 作者:太空宇宙 更新时间:2023-11-03 18:57:55 25 4
gpt4 key购买 nike

def start(self):
self.running = True
while self.running:
pass

def shut_down(self):
self.running = False

嗨,我想知道一个好方法,同步变量运行。我想要快速的解决方案,但我不知道什么是更好的信号量、互斥锁或锁。我认为 shutdown_down 不经常使用。

这是我最好的解决方案,但我认为我们可以做得更好。

def start(self):
self.__lock__.acquire()
self.running = True
while self.running:
self.__lock__.release()
self.__lock__.acquire()

def shut_down(self):
self.__lock__.acquire()
self.running = False
self.__lock__.release()

最佳答案

对于具有 bool 标志等原始值的简单示例,Python 中不需要同步。至少,在 CPython 中不行(您可以从 python.org 下载标准解释器)。

这是因为整个解释器被“全局解释器锁”覆盖,因此在 Python 级别一次只能运行一个线程(多个线程可能会在扩展模块中同时执行某些操作,如果这些模块设置为在适当的时间释放 GIL)。因此,当您的工作线程在 start 函数中循环检查 running 属性时,可以保证该对象处于正常状态。如果除了 shutdown_down 之外没有其他代码修改它,您甚至可以确定它将是 TrueFalse

因此,如果您要使用 CPython 并且坚持非常简单的逻辑(例如仅由一个线程写入的 bool 标志),那么您的第一个示例代码将运行得很好。

如果您需要更复杂的逻辑,例如可以由多个线程中的任何一个递增的计数器,那么您将需要一些同步以避免竞争条件,例如 TOCTTOU .

Python 提供的最简单的同步工具之一是 the queue module ,它允许线程之间以 FIFO 方式同步通信。与较低级别的东西相比,我无法谈论它的性能,但是让代码在队列中正确工作确实很容易(而它很容易搞乱手动锁定,最终导致死锁或竞争条件,这对于调试来说是一场噩梦) .

关于python - 变量循环和同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16866562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com