Pass parameters to schedule

Adityo Setyonugroho picture Adityo Setyonugroho · Nov 24, 2016 · Viewed 11.2k times · Source

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)?

Answer

Alex Hall picture Alex Hall · Nov 24, 2016

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!'))