我们可以使用gevent.sleep()进行精确计时吗? [英] Can we use gevent.sleep() for precise timings?

查看:373
本文介绍了我们可以使用gevent.sleep()进行精确计时吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们可以在应用程序中的任何地方使用 gevent.sleep()还是在 gevent.monkey.patch_time()上使用任何没有问题的第三方图书馆,特别是精确的时间安排都发生了吗?

Can we use gevent.sleep() anywhere in our application or gevent.monkey.patch_time() on any third party libraries without an issue, especially precise timings takes place?

例如,某些图书馆使用 time.sleep()函数用于测量几个微秒,该微秒用于控制嵌入式(点矩阵LCD等)设备。我们可以安全地猴子修补此类库吗?

For example, some libraries use time.sleep() function in order to measure a couple of microseconds that is used to control an embedded (dot matrix LCD and such) device. Can we safely monkey patch such libraries without a problem?

推荐答案

否。 gevent.sleep()不适合精确的时间。

No. gevent.sleep() is not suitable for precise timings.

这是测试代码:

import gevent
import time


for i in range(10):
        test_duration = 0.1 ** i
        start_time = time.time()
        gevent.sleep(test_duration)
        end_time = time.time()

        gevent_duration = end_time - start_time

        err = (gevent_duration - test_duration) / test_duration
        print("test_duration: %.10f secs, err: %%%.10f" % (test_duration, err))

结果如下:

ceremcem@cca-erik:gevent-timing-test$ python test.py 
test_duration: 1.0000000000 secs, err: %0.0009050369
test_duration: 0.1000000000 secs, err: %0.0037088394
test_duration: 0.0100000000 secs, err: %0.0192871094
test_duration: 0.0010000000 secs, err: %0.1119842529
test_duration: 0.0001000000 secs, err: %9.9791755676
test_duration: 0.0000100000 secs, err: %108.9109649658
test_duration: 0.0000010000 secs, err: %1095.0102081299
test_duration: 0.0000001000 secs, err: %10878.0397644043
test_duration: 0.0000000100 secs, err: %108407.9279174804
test_duration: 0.0000000010 secs, err: %1087902.9764404292
ceremcem@cca-erik:gevent-timing-test$ python test.py 
test_duration: 1.0000000000 secs, err: %0.0009670258
test_duration: 0.1000000000 secs, err: %0.0031008720
test_duration: 0.0100000000 secs, err: %0.0271072388
test_duration: 0.0010000000 secs, err: %0.1529922485
test_duration: 0.0001000000 secs, err: %10.1293792725
test_duration: 0.0000100000 secs, err: %117.3032989502
test_duration: 0.0000010000 secs, err: %1191.0928955078
test_duration: 0.0000001000 secs, err: %11898.4712829590
test_duration: 0.0000000100 secs, err: %119089.0802612304
test_duration: 0.0000000010 secs, err: %1188992.4539794917

如您所见,错误也是不可预测的。

As you can see, errors are also unpredictable.

这就是为什么在这种情况下应谨慎使用 gevent.monkey.patch_all()的原因。

That's why gevent.monkey.patch_all() should be used carefully in such situations.

这篇关于我们可以使用gevent.sleep()进行精确计时吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆