Search code examples
pythonschedule

Pass parameters to schedule


How can I pass parameters to schedule?

The function I want to get called:

def job(param1, param2):
    print(str(param1) + str(param2))

How I schedule it:

schedule.every(10).minutes.do(job)

How can I pass a parameter to do(job)?


Solution

  • In general with this kind of thing you can always do this:

    schedule.every(10).minutes.do(lambda: job('Hello ', 'world!'))
    

    Looking at the source:

    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)
    

    We see that you can also do this:

    schedule.every(10).minutes.do(job, 'Hello ', 'world!')
    

    Or, as the code suggests, an alternative to the generic lambda method is:

    schedule.every(10).minutes.do(functools.partial(job, 'Hello ', 'world!'))