I think that the architecture of RQ Scheduler is fundamentally flawed and it's much more complicated than it needs to be.
Schedules are stored in Redis
Even if you remove or modify your scheduling code, the old schedules remain in Redis until explicitly canceled.
Non-declarative model
Simply deleting the scheduler.cron(...) line does not remove the schedule; you must manually run scheduler.cancel(job_id).
rqscheduler doesn’t run your code
The rqscheduler command only polls Redis for due jobs. It does not import or execute your Python code to dynamically update schedules.
No built-in reconciliation
You must handle the lifecycle of scheduled jobs—adding, updating, or removing them—on your own, often requiring extra scripts or manual processes.
I strongly prefer Celery Beat's approach of dispatching / enqueuing tasks, from my python code, exactly when they are scheduled to run.
However, in this particular project, I'm using RQ and thus, Celery Beat is unavailable to me.
How can I create something simple that takes cron strings and works in similar way to Celery Beat?