如何在Python中的确切给定时间点调用函数?

How to invoke a function at an exactly given time point in Python?

如何在Python的确切时间点调用函数?

例如:

1
2
3
4
5
6
7
import time
def foo():
    print time.time()

start_time = time.time()
expected_time_to_run_foo = start_time + 12.3456
#invoke foo

如何使函数foo打印给定值expected_time_to_run_foo

P.S。:我不确定time.sleep()是否有效。 我需要更高的精度。


内置的sched模块将允许您安排未来的事件。 (这里的所有代码都是Python 3)。

1
2
3
4
5
6
7
8
9
10
11
import sched
import time

def print_something(x):
    print(x)

s = sched.scheduler()

s.enter(1, 0, print_something, ['first'])
s.enter(2, 0, print_something, ['second'])
s.run()

您可以提供自己的功能来获取当前时间并等到将来的指定时间。 默认值为time.monotonic(time.time的调整版本)和time.sleep。

使用忙等待可以略微提高准确度,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sched
import time

def print_something(x):
    print(x)

def busy_wait(target):
    while time.monotonic() < target:
        pass

s = sched.scheduler(delayfunc=busy_wait)

s.enter(1, 0, print_something, ['first'])
s.enter(2, 0, print_something, ['second'])
s.run()

但是,实际上,桌面操作系统中存在许多意外延迟的原因,如果您的时序限制很紧,那么没有实时操作系统,您将无法获得可接受的结果。