使用asyncio / aiocron调度函数时传递参数

时间:2016-08-17 18:26:12

标签: python python-3.x python-asyncio

我正在使用aiocron库来安排一天中某些时间的函数调用。这是我想要做的最小例子。在这个例子中,我想发送一个"早上好"每天8:00发送消息

class GoodMorningSayer:        
    @asyncio.coroutine
    def send_message(text):
        #insert fancy networking stuff here        

    @aiocron.crontab("0 8 * * *")
    @asyncio.coroutine
    def say_good_morning():
        yield from self.send_message("good morning!")
        # I don't have self here, so this will produce an error

不幸的是,我无法在self方法中获取say_good_morning,因为aiocron显然不知道或不关心它所调用的函数是什么类。这使得aiocron相当在我的情况下没用,这是一种耻辱。有没有办法在self调用的函数中获得aiocron

1 个答案:

答案 0 :(得分:0)

我现在通过使用闭包来解决这个问题:

class GoodMorningSayer:
    def __init__(self):
        @aiocron.crontab("0 8 * * *")
        @asyncio.coroutine
        def on_morning()
            yield from self.send_message("good morning!")       

    @asyncio.coroutine
    def send_message(text):
        #insert fancy networking stuff here        

在实际程序中,我将其包装在一些样板文件中,最终调用self.say_good_morning以保持代码清洁