본문 바로가기

프로그래밍, 코딩

[파이썬] schedule 모듈 사용 시, do 함수에 인자를 전달하는 방법

반응형

파이썬 프로그램을 백그라운드로 실행할 때, 특정시간 마다 배치 프로그램이 돌아가게 하려면, 아래 link와 같은 스케쥴 모듈을 사용해야 한다.

 

 

나는 스케쥴링 모듈 중에서 schedule 모듈을 사용했다.

 

 

(자세한 사항은 하기 link 참조)

 

 

https://lemontia.tistory.com/508

 

[python] 파이썬 스케줄 수행 - schedule, apscheduler

특정시간마다 배치를 돌릴 수 있는 기능이 필요해서 스케줄링을 찾아보다가 2개를 발견했습니다. 1) schedule 2) apscheduler 각각의 활용방법에 대해 알아보도록 하겠습니다 1) schedule schedule 는 명령어

lemontia.tistory.com

 

 

특정시간대에 작동하도록 할 때, "do(함수명)" 를 사용하는 것은 알겠는데, 아무리 구글링을 해도 do로 실행되는 함수에 "인자"를 전달하는 방법은 찾지 못했다.

 

 

그러다가 do 함수에 대한 내용을 보니, 실행되는 함수에 인자를 전달하는 방법은 "do(함수명, 인자)" 로 하면 된다.

 

    def do(self, job_func, *args, **kwargs):
        """
        Specifies the job_func that should be called every time the
        job runs.

        Any additional arguments are passed on to job_func when
        the job runs.

        :param job_func: The function to be scheduled
        :return: The invoked job instance
        """
        self.job_func = functools.partial(job_func, *args, **kwargs)
        try:
            functools.update_wrapper(self.job_func, job_func)
        except AttributeError:
            # job_funcs already wrapped by functools.partial won't have
            # __name__, __module__ or __doc__ and the update_wrapper()
            # call will fail.
            pass
        self._schedule_next_run()
        self.scheduler.jobs.append(self)
        return self

 

 

예를 들어, send(text)라는 명령을 매일 오후 1시에 실행시킨다면, 아래와 같이 코드를 작성하면 된다.

 

send(text)  =>  do(send, text)

 

schedule.every().day.at("13:00").do(send, text)

 

반응형