如何在没有多线程的情况下在python中安排事件?

时间:2010-10-20 14:33:20

标签: python

是否可以在没有多线程的情况下在python中安排事件? 我试图获得像调度函数每隔x秒执行一次的事情。

5 个答案:

答案 0 :(得分:4)

也许sched

答案 1 :(得分:2)

您可以使用signal.alarmSIGALRM的信号处理程序的组合,以便每隔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)

正如@eumiro指出的那样,Sched可能就是这样做的方法。但是,如果您不想这样做,那么您可以这样做:

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...')

我这是你真正想要的吗?