2009-06-24 87 views

回答

7

许多程序员尽量避免多线程代码,因为它是非常容易出错的命令式编程。

如果您想要在单线程环境中执行计划任务,那么您可能需要某种“Reactor”。您可能想要使用现成的产品,如Twisted's。

然后这将是您的反应堆中设置的基本功能,例如(具有pygame的):

pygame.time.set_timer - 事件队列上的反复创建事件

+5

“很多程序员试图避免使用多线程代码,因为它在命令式编程中非常容易出错。” 稍有偏离主题,但我不认为这是避免多线程的好理由。关键是要做到这一点,充分理解内存一致性和锁定语义。 我同意这种程序设计经验有限的程序员应该在生产代码中使用这些技术之前大量投入学习和实践。 如果你想充分利用你的资源,在多核编程的时代避免它并不是一个真正可行的选择。 – Scruffers 2012-06-22 12:55:43

+3

@Scraffers多线程难以想象(难以解决)(难以修复)(http://stackoverflow.com/questions/3830347/can-a-multi-threaded-program-ever-be-deterministic )),还有很多其他方式可以使用线程以外的多个内核。 – dbr 2012-09-10 23:08:32

2
的Python

在线程模块中有一个Timer类,但它是一次性定时器,所以你最好做一些你看到链接的东西。 http://code.activestate.com/recipes/65222/

为什么你认为这是丑陋的,一旦你写了这样的类用法就像在java中一样简单。

如果您在某些GUI中使用它,例如wxPython比它有wx.Timer你可以直接使用

7

不直接回答这个问题。

在Linux/Unix操作系统有办法很少这样做,通常我只写我的程序/脚本正常,然后将其添加到cron或类似的东西(如launchd在OS X)

响应问题从这里开始。

使用标准的python sched模块 - standard library documentation描述了一些漂亮的解决方案。

7

尝试multiprocessing模块。

from multiprocessing import Process 
import time 

def doWork(): 
    while True: 
     print "working...." 
     time.sleep(10) 



if __name__ == "__main__": 
    p = Process(target=doWork) 
    p.start() 

    while True: 
     time.sleep(60) 
相关问题