Python中非常精确的周期函数调用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中非常精确的周期函数调用相关的知识,希望对你有一定的参考价值。

我在Windows平台上使用Python,我需要每隔100ms或更低时间定期执行一段代码。举个例子:

while (packetNumber < 30000):
    sock.sendto(bytes(MESSAGE, "utf-8"), (SERVER_IP, SERVER_PORT))
    packetNumber = packetNumber + 1
    print("Sent the", packetNumber, "th packet")

我只关心这条线的召唤时间:

sock.sendto(bytes(MESSAGE, "utf-8"), (SERVER_IP, SERVER_PORT))

它需要每100毫秒(或尽可能准确)调用,如下所示:

11:24:07.00000

11:24:07.10000

11:24:07.20000

11:24:07.30000

等等

实现这一目标的最准确方法是什么?

答案

这可能对你有所帮助。你去do_something()每100ms调用一次。

该代码还证明了该方法在一秒钟内执行了10次。即它每100ms执行一次。查看结果。

import threading
from time import time

def quit(delta):
    print(delta)
    return int(delta) == 1

def do_something(*args):
    then = args[0]
    now = time()
    if quit(now - then):
        threading.Timer(0.1, do_something, [then, quit]).cancel()
    else:
        threading.Timer(0.1, do_something, [then, quit]).start()

do_something(time())

结果:

0.10426497459411621
0.2058699131011963
0.3096139430999756
0.4199540615081787
0.525109052658081
0.6257798671722412
0.7308750152587891
0.8337719440460205
0.9371669292449951
1.041382074356079

以上是关于Python中非常精确的周期函数调用的主要内容,如果未能解决你的问题,请参考以下文章

Swift中非常慢的扫雷递归算法

Python算法——递归思想

python中非常好用的数据库管理工具

同一个列表中非常相似的类型(继承 vs 区分联合 vs 泛型?)

在 kivy 中非常频繁地运行函数 (Kivy Clock/FreeClock)

Keras 模型(tensorflow 后端)在 python 3.5 中训练得非常好,但在 python 2.7 中非常糟糕