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

Python time.time()并发程序的可靠性,第1张

概述我正在为令牌环LAN写一个模拟,并试图在一个单独的线程中运行一个计时器到我的主程序,以检查从监视器接收“活动状态”的时间.我在其他节点之前启动监控程序,它们在发送和“活动状态”之前都有相同的等待时间,或者开始选择新监视器,但节点程序似乎在监视器之前超时. 这只是python中并发性的问题,还是我的代码更可能出现问题? 这是线程运行的函数,如果您需要更多信息请询问 def timer(): 我正在为令牌环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()并发程序的可靠性全部内容,希望文章能够帮你解决Python time.time()并发程序的可靠性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1196825.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存