是否可以在没有多线程的情况下在python中安排事件? 我试图获得像调度函数每隔x秒执行一次的事情。
答案 0 :(得分:4)
也许sched?
答案 1 :(得分:2)
您可以使用signal.alarm
和SIGALRM
的信号处理程序的组合,以便每隔5秒重复一次该功能。
import signal
def handler(sig, frame):
print "I am done this time"
signal.alarm(5) #Schedule this to happen again.
signal.signal(signal.SIGALRM, handler)
signal.alarm(5)
另一种选择是使用Python附带的sched模块,但我不知道它是否使用线程。
答案 2 :(得分:2)
import time
while 1:
#call your event
time.sleep(x) #wait for x many seconds before calling the script again
答案 3 :(得分:2)
您可以使用celery:
Celery是一个异步的开源软件 任务队列/作业队列基于 分布式消息传递。它是 专注于实时操作,但是 也支持调度。
执行单位,称为任务,是 在一个或多个上同时执行 工人节点。任务可以执行 异步(在后台)或 同步(等到准备好了。)
和一个代码示例:
您可能希望看到一些代码 现在,这是一个添加示例的任务 两个数字:
from celery.decorators import task
@task
def add(x, y):
return x + y
您可以在中执行任务 背景,或等待它完成:
>>> result = add.delay(4, 4)
>>> result.wait() # wait for and return the result 8
这比你描述的问题更常用。
答案 4 :(得分:1)
没有线程,定期调用函数很少有意义。因为您的主线程被等待阻止 - 它什么都不做。 但是,如果你真的想这样做:
import time
for x in range(3):
print('Loop start')
time.sleep(2)
print('Calling some function...')
我这是你真正想要的吗?