使用 Python 多处理以固定速率安排任务

Schedule Tasks at Fixed Rate with Python Multiprocessing

我想 运行 在 Python 中异步调用一个函数,以固定的时间间隔重复调用该函数。 This java class 的功能与我想要的类似。我希望在 python 中得到一些东西,比如:

pool = multiprocessing.Pool()
pool.schedule(func, args, period)
# other code to do while that runs in the background
pool.close()
pool.join()

是否有提供类似功能的软件包?我更喜欢简单轻便的东西。

如何在 python 中实现此功能?

post 类似,但需要一个进程中的解决方案。我想要一个多进程异步解决方案。

这是一种可能的解决方案。一个警告是 func 需要比 rate 快 return ,否则它不会像 rate 那样频繁地被调用,如果它变得更快,它将比 rate 更快地被调度,同时它赶上了。这种方法看起来工作量很大,但并行编程通常也很困难。我希望再次查看代码以确保我没有在某处等待死锁。

import multiprocessing, time, math


def func():
    print('hello its now {}'.format(time.time()))


def wrapper(f, period, event):
    last = time.time() - period
    while True:
        now = time.time()

        # returns True if event is set, otherwise False after timeout
        if event.wait(timeout=(last + period - now)):
            break
        else:
            f()
            last += period


def main():
    period = 2
    # event is the poison pill, setting it breaks the infinite loop in wrapper
    event = multiprocessing.Event()
    process = multiprocessing.Process(target=wrapper, args=(func, period, event))
    process.start()

    # burn some cpu cycles, takes about 20 seconds on my machine
    x = 7
    for i in range(50000000):
        x = math.sqrt(x**2)

    event.set()
    process.join()
    print('x is {} by the way'.format(x))

if __name__ == '__main__':
    main()