def schedule_every(self, task_name, period, every, crontab='',args=None, kwargs=None, queue=''): main_task = 'optimizer.tasks.base_task' permissible_periods = ['days', 'hours', 'minutes', 'seconds'] # create the periodic task and the interval ptask_name = "%s_%s" % (task_name, datetime.datetime.now()) # create some name for the period task if period and every: if period not in permissible_periods: raise Exception('Invalid period specified') interval_schedules = IntervalSchedule.objects.filter(period=period, every=every) if interval_schedules: # just check if interval schedules exist like that already and reuse em interval_schedule = interval_schedules[0] else: # create a brand new interval schedule interval_schedule = IntervalSchedule() interval_schedule.every = every # should check to make sure this is a positive int interval_schedule.period = period interval_schedule.save() ptask = PeriodicTask(name=ptask_name, task=main_task, interval=interval_schedule) elif crontab: ptask = PeriodicTask(name=ptask_name, task=main_task, crontab=crontab) if args: ptask.args = args if kwargs: ptask.kwargs = kwargs ptask.queue = queue ptask.save() return ptask
def schedule_every(self, every, period, args=None, kwargs=None): print "Scheduling %s to run every %s %s" % (self.name, every, period) if self.periodic_task: self.periodic_task.delete() print "Cleared all current periodic tasks" permissible_periods = ['days', 'hours', 'minutes', 'seconds'] if period not in permissible_periods: raise Exception('Invalid period specified: %s, must be one of: %s' % (period, ','.join(permissible_periods))) # create the periodic task and the interval ptask_name = "%s_%s" % (self.celery_task_name, self.name) interval_schedules = IntervalSchedule.objects.filter(period=period, every=every) if interval_schedules: # just check if interval schedules exist like that already and reuse em interval_schedule = interval_schedules[0] else: interval_schedule = IntervalSchedule() interval_schedule.every = every interval_schedule.period = period interval_schedule.save() print "Creating new periodic task" periodic_task = PeriodicTask(name=ptask_name, task=self.celery_task_name, interval=interval_schedule) if args: periodic_task.args = args if kwargs: periodic_task.kwargs = kwargs periodic_task.save() print "Attached the periodic task to the project task" self.periodic_task = periodic_task print "Saving project task" self.save()
def schedule_every(task_name, period, every, args=None, kwargs=None): """ schedules a task by name every "every" "period". So an example call would be: TaskScheduler('mycustomtask', 'seconds', 30, [1,2,3]) that would schedule your custom task to run every 30 seconds with the arguments 1,2 and 3 passed to the actual task. """ permissible_periods = ['days', 'hours', 'minutes', 'seconds'] if period not in permissible_periods: raise Exception('Invalid period specified') # create the periodic task and the interval ptask_name = "%s_%s" % (task_name, datetime.now() ) # create some name for the period task interval_schedules = IntervalSchedule.objects.filter(period=period, every=every) if interval_schedules: # just check if interval schedules exist like that already and reuse em interval_schedule = interval_schedules[0] else: # create a brand new interval schedule interval_schedule = IntervalSchedule() interval_schedule.every = every # should check to make sure this is a positive int interval_schedule.period = period interval_schedule.save() ptask = PeriodicTask(name=ptask_name, task=task_name, interval=interval_schedule) if args: ptask.args = args if kwargs: ptask.kwargs = kwargs ptask.save() return TaskScheduler.objects.create(periodic_task=ptask)
def schedule_every(task_name, period, every, args=None, kwargs=None): """ schedules a task by name every "every" "period". So an example call would be: TaskScheduler('mycustomtask', 'seconds', 30, [1,2,3]) that would schedule your custom task to run every 30 seconds with the arguments 1,2 and 3 passed to the actual task. """ permissible_periods = ["days", "hours", "minutes", "seconds"] if period not in permissible_periods: raise Exception("Invalid period specified") # create the periodic task and the interval ptask_name = "%s_%s" % (task_name, datetime.now()) # create some name for the period task interval_schedules = IntervalSchedule.objects.filter(period=period, every=every) if interval_schedules: # just check if interval schedules exist like that already and reuse em interval_schedule = interval_schedules[0] else: # create a brand new interval schedule interval_schedule = IntervalSchedule() interval_schedule.every = every # should check to make sure this is a positive int interval_schedule.period = period interval_schedule.save() ptask = PeriodicTask(name=ptask_name, task=task_name, interval=interval_schedule) if args: ptask.args = args if kwargs: ptask.kwargs = kwargs ptask.save() return TaskScheduler.objects.create(periodic_task=ptask)
def schedule_with_crontab(task_name, crontab_schedule, args=None, kwargs=None): ptask_name = "%s_%s" % (task_name, datetime.datetime.now()) ptask = PeriodicTask(name=ptask_name, task=task.name, crontab=crontab_schedule ) if args: ptask.args = args if kwargs: ptask.kwargs = kwargs ptask.save() return ProjectTask.objects.create(periodic_task=ptask)
def schedule(task_path, minutes=0, task_name="", kwargs=None): if minutes < 1: raise Exception("Nope") intervals = IntervalSchedule.objects.filter(period='minutes', every=minutes) if intervals: interval = intervals[0] else: interval = IntervalSchedule.objects.create(period='minutes', every=minutes) task = PeriodicTask(name=task_name, task=task_path, interval=interval) task.kwargs = kwargs if kwargs else '{}' task.save() return TaskScheduler.objects.create(periodic_task=task)
def schedule_every(task_name, task, period, every, args=None, kwargs=None): permissible_periods = ['days', 'hours', 'minutes', 'seconds'] if period not in permissible_periods: raise Exception('Invalid period specified') # create the periodic task and the interval interval_schedules = IntervalSchedule.objects.filter(period=period, every=every) if interval_schedules: # just check if interval schedules exist like that already and reuse em interval_schedule = interval_schedules[0] else: # create a brand new interval schedule interval_schedule = IntervalSchedule() interval_schedule.every = every # should check to make sure this is a positive int interval_schedule.period = period interval_schedule.save() ptask = PeriodicTask(name=task_name, task=task, interval=interval_schedule) if args: ptask.args = args if kwargs: ptask.kwargs = kwargs ptask.save() return TaskScheduler.objects.create(periodic_task=ptask)
def schedule_task_every(task_name, every, period, args=None, kwargs=None): permissible_periods = ['days', 'hours', 'minutes', 'seconds'] if period not in permissible_periods: raise Exception('Invalid period specified') # create the periodic task and the interval ptask_name = "%s_%s" % (task_name, datetime.datetime.now()) interval_schedules = IntervalSchedule.objects.filter(period=period, every=every) if interval_schedules: # just check if interval schedules exist like that already and reuse em interval_schedule = interval_schedules[0] else: interval_schedule = IntervalSchedule() interval_schedule.every = every interval_schedule.period = period interval_schedule.save() ptask = PeriodicTask(name=ptask_name, task=task_name, interval=interval_schedule) if args: ptask.args = args if kwargs: ptask.kwargs = kwargs ptask.save() return ProjectTask.objects.create(periodic_task=ptask, name=task_name)
def schedule_cron(task_name, minute='*', hour='*', day_of_week='*', day_of_month='*', month_of_year='*' ,args=None, kwargs=None): # create the periodic task and the interval ptask_name = "%s_%s" % (task_name, datetime.now()) # create some name for the period task crontab_schedules = CrontabSchedule.objects.filter(minute=minute, hour=hour, day_of_week=day_of_week, day_of_month=day_of_month, month_of_year=month_of_year) if crontab_schedules: # just check if interval schedules exist like that already and reuse em crontab_schedule = crontab_schedules[0] else: # create a brand new interval schedule crontab_schedule = CrontabSchedule() crontab_schedule.minute = minute crontab_schedule.hour = hour crontab_schedule.day_of_week = day_of_week crontab_schedule.day_of_month = day_of_month crontab_schedule.month_of_year = month_of_year crontab_schedule.save() ptask = PeriodicTask(name=ptask_name, task=task_name, crontab=crontab_schedule) if args: ptask.args = args if kwargs: ptask.kwargs = kwargs ptask.save() return TaskScheduler.objects.create(periodic_task=ptask)
def schedule_every(task_name, task, period, every, args=None, kwargs=None): permissible_periods = ['days', 'hours', 'minutes', 'seconds'] if period not in permissible_periods: raise Exception('Invalid period specified') # create the periodic task and the interval interval_schedules = IntervalSchedule.objects.filter(period=period, every=every) if interval_schedules: # just check if interval schedules exist like that already and reuse em interval_schedule = interval_schedules[0] else: # create a brand new interval schedule interval_schedule = IntervalSchedule() interval_schedule.every = every # should check to make sure this is a positive int interval_schedule.period = period interval_schedule.save() ptask = PeriodicTask(name=task_name, task=task, interval=interval_schedule) if args: ptask.args = args if kwargs: ptask.kwargs = kwargs ptask.save() return TaskScheduler.objects.create(periodic_task=ptask)
def create_periodic_task(task_name, period, every, args=None, kwargs=None): """ adapted from https://groups.google.com/forum/#!msg/celery-users/CZXCh8sCK5Q/ihZgMV2HWWYJ c/o Jean Mark Schedules a task by name every "every" "period". So an example call would be: create_periodic_task('mycustomtask', 'seconds', 30, [1,2,3]) that would schedule your custom task to run every 30 seconds with the arguments 1,2 and 3 passed to the actual task. """ # create the schedule interval_schedule = manage_interval(period, every) # create the periodic task ptask_name = "%s_%s" % (task_name, timezone.now()) ptask = PeriodicTask(name=ptask_name, task=task_name, interval=interval_schedule) if args: ptask.args = args if kwargs: ptask.kwargs = kwargs ptask.save() return ptask