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

时间:2016-01-25 13:40:42

标签: python multiprocessing scheduled-tasks

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

dbms_crypto

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

我如何在python中实现此功能?

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

1 个答案:

答案 0 :(得分:0)

这是一种可能的解决方案。需要注意的是,func需要以比速率更快的速度返回,否则它不会像速率那样频繁地被调用,如果它变得越来越快,它将比它赶上时更快地被调度。这种方法似乎很多工作,但是再次并行编程通常很难。我希望再看看代码,以确保我没有在某个地方等待死锁。

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()