gpt4 book ai didi

Python time.time() 在并发程序中的可靠性

转载 作者:太空狗 更新时间:2023-10-30 01:29:38 25 4
gpt4 key购买 nike

我正在为 token 环 LAN 编写一个模拟程序,并尝试在我的主程序的单独线程中运行一个计时器,以检查从监视器接收到“事件状态”时是否超时。我在其他节点之前启动监视器程序,它们在发送和“事件状态”或开始选择新监视器之前都有相同的等待时间,但节点程序似乎在监视器之前超时。

这只是 python 中的并发问题还是我的代码更有可能出现问题?

这是线程运行的函数,如果您需要更多信息,请询问

def timer():
global reset
global ismonitor
global mToSend
global dataToSend
reset = time.time()
send_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while 1:
timer = time.time()
elapsed = timer - reset
if elapsed > 5:
if ismonitor:
mToSend = "110000" ## send around a token with a monitor alive flag on the broadcast channel
mToSend += maddr
dataToSend = True
reset = time.time()
else:
holdelection()
reset = time.time()

最佳答案

由于 Python 的全局解释器锁 (GIL),线程永远不会同时执行。相反,一个线程获得一段执行时间,而所有其他线程都被锁定(它们不执行任何代码)。这就是为什么对 time.time() 的调用仅与分配给线程的最小时间片一样准确。

查看 David Beazley 的工作以更好地理解线程在 Python 中的工作原理:http://www.dabeaz.com/GIL/他表明,根据您使用的 Python 版本,线程在重新获取 GIL 之前可能会被阻塞几秒钟。在那种情况下,您的 time.time() 调用将关闭相同的时间。

如果您想要更高的准确性,您应该考虑使用进程而不是线程。在多处理模块的帮助下,它们的使用并不比 Python 中的线程更复杂:http://docs.python.org/3.3/library/multiprocessing.html

关于Python time.time() 在并发程序中的可靠性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15635386/

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