Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 指数退避:time.sleep with random.randint(0,1000)/1000_Python - Fatal编程技术网

Python 指数退避:time.sleep with random.randint(0,1000)/1000

Python 指数退避:time.sleep with random.randint(0,1000)/1000,python,Python,在许多GoogleAPI的代码示例中,我看到了这行代码 time.sleep((2 ** n) + (random.randint(0, 1000) / 1000)) random.randint(0,1000)/1000始终返回随机毫秒 这种随机毫秒有什么用?在这样的情况下有点随机性是好的。例如,如果有大量客户端访问同一台服务器,让它们使用相同的确定性回退可能会导致它们以完美的锁定步骤访问服务器,这是不可取的。原因如下: 在上面的流程中,random_number_microsides是 毫

在许多GoogleAPI的代码示例中,我看到了这行代码

time.sleep((2 ** n) + (random.randint(0, 1000) / 1000))
random.randint(0,1000)/1000
始终返回随机毫秒


这种随机毫秒有什么用?

在这样的情况下有点随机性是好的。例如,如果有大量客户端访问同一台服务器,让它们使用相同的确定性回退可能会导致它们以完美的锁定步骤访问服务器,这是不可取的。

原因如下:

在上面的流程中,random_number_microsides是 毫秒小于或等于1000。这是必须避免的 某些并发实现中的某些锁定错误。价值 每次等待后,必须重新定义随机数\u毫秒

这是一种常用的技术,用于“模糊”API访问的时间,以避免陷入资源锁获取和释放的重复模式而导致的抖动。

在Python 2中,(random.randint(0,1000)/1000))将始终返回0(整数除法返回整数)。另外,就个人而言,我会设定指数退避的上限,否则你的一些客户可能会等待很长时间。我会使用:min(64,(2**n))+(random.randint(01000)/1000.0)