我想在Python中异步运行一个函数,以固定的时间间隔重复调用该函数。 This java类具有与我想要的功能类似的功能。我希望在python中有类似的东西:
dbms_crypto
是否有任何提供类似功能的软件包?我更喜欢简单轻便的东西。
我如何在python中实现此功能?
此post类似,但要求提供进程中的解决方案。我想要一个多进程异步解决方案。
答案 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()