python – 没有while循环每n秒做一次事情?

好吧,我正在尝试为Blender写一个附加组件,我需要每隔n秒做一次,但是,我不能使用while循环,因为它冻结了Blender!我该怎么办?

解决方法:

Strange errors using ‘threading’ module的Blender API文档:

Python threading with Blender only works properly when the threads finish up before the script does. By using threading.join() for example.

Note: Pythons threads only allow co-currency and won’t speed up your scripts on multi-processor systems, the subprocess and multiprocess modules can be used with blender and make use of multiple CPU’s too.

from threading import Thread, Event

class Repeat(Thread):
    def __init__(self,delay,function,*args,**kwargs):
        Thread.__init__(self)
        self.abort = Event()
        self.delay = delay
        self.args = args
        self.kwargs = kwargs
        self.function = function
    def stop(self):
        self.abort.set()
    def run(self):
        while not self.abort.isSet():
            self.function(*self.args,**self.kwargs)
            self.abort.wait(self.delay)

例:

from time import sleep
def do_work(foo):
    print "busy", foo
r = Repeat(1,do_work,3.14) # execute do_work(3.14) every second
r.start() # start the thread
sleep(5)  # let this demo run for 5s
r.stop()  # tell the thread to wake up and stop
r.join()  # don't forget to .join() before your script ends
上一篇:3D与搅拌器和Python的翻译


下一篇:python – 用于创建Toolshelf Panel的Blender脚本无法提供任何结果