One solution is to use task queues. In Django it is easy to implement a task queue with a third-party library called "huey". It allows developers to specify when to execute a task using annotations:
@huey.periodic_task(crontab(minute='*'))
def print_time():
print(datetime.now())
This task would be executed every minute. Apart from scheduled tasks it also offers the option to execute tasks in the future.