Python时间。时间()并发程序的可靠性

2024-06-16 14:55:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这只是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()

Tags: 程序send节点timesocket线程globalmonitor
1条回答
网友
1楼 · 发布于 2024-06-16 14:55:53

由于Python的全局解释器锁(GIL),线程永远不会同时执行。相反,一个线程获得执行时间的一部分,而所有其他线程都被锁定(它们不执行任何代码)。所以打电话给时间。时间()仅与分配给线程的最小时间片一样精确。在

为了更好地理解Python中线程是如何工作的,请看davidbeazley的工作:http://www.dabeaz.com/GIL/他指出,根据Python版本的不同,在线程重新获得GIL之前,可能会阻塞几秒钟。那样的话你的时间。时间()呼叫将在相同的时间内关闭。在

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

相关问题 更多 >