2016-08-17 2 views
1

aiocron 라이브러리를 사용하여 특정 시간 동안 함수 호출을 예약합니다. 이것은 내가하고 싶은 최소한의 예입니다. 이 예제에서, 나는 불행하게도 8시asyncio/aiocron을 사용하여 함수를 예약 할 때 인수를 전달할 때

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 

에 "좋은 아침"메시지를 매일 보내려면, 나는 aiocron로 분명히 알거나 상관하지 않는다, 내 say_good_morning 방법에 self을 얻는 방법이 없습니다 무엇을 클래스가 호출하는 함수가 있습니다. 이것은 아이오 크로론을 내 경우에 쓸모 없게 만듭니다. 이것은 수치 스럽습니다. aiocron이라는 함수에서 self을 얻을 수있는 방법이 있습니까? 나는 결국 내가 말할 수있는대로 코드 청소기

+0

을 유지하기 위해 self.say_good_morning 호출 일부 상용구로 포장 실제 프로그램에서

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 

: –

+0

@AndrewSvetlov 대신에 사용해야하는 것에 대한 권장 사항이 있습니까? – Atsch

+0

나는'await asyncio.sleep (...) '에 의해 특정 지연에서 자고있는 자신의 루프를 작성하는 것이 추가 라이브러리가 필요없이 문제를 해결할 것이라고 믿는다. –

답변

0

나는 클로저를 사용하여 지금이 나 자신 해결 그것은 나쁜 설계 라이브러리, 절대 사용하지 마십시오. 기본값이 아닌 이벤트 루프에서는 작동하지 않습니다. 게다가`try/finally` 블록에있는 모든 메소드를 랩핑하지 않는 한`crontab` 메소드로 발생한 에러를 정확하게 처리 할 방법이 없습니다. 모든 문제에 대해 단일 처리기에 오류가 없으므로 실제로 문제가됩니다.