Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
RQ Scheduler <https://github.com/ui/rq-scheduler>
_ is a small package that
adds job scheduling capabilities to RQ <https://github.com/nvie/rq>
,
a Redis <http://redis.io/>
based Python queuing library.
.. image:: https://travis-ci.org/ui/rq-scheduler.svg?branch=master :target: https://travis-ci.org/ui/rq-scheduler
RQ
_You can install RQ Scheduler
_ via pip::
pip install rq-scheduler
Or you can download the latest stable package from PyPI <http://pypi.python.org/pypi/rq-scheduler>
_.
Schedule a job involves doing two different things:
There are two ways you can schedule a job. The first is using RQ Scheduler's enqueue_at
::
from redis import Redis
from rq_scheduler import Scheduler
from datetime import datetime
scheduler = Scheduler(connection=Redis()) # Get a scheduler for the "default" queue
# Puts a job into the scheduler. The API is similar to RQ except that it
# takes a datetime object as first argument. So for example to schedule a
# job to run on Jan 1st 2020 we do:
scheduler.enqueue_at(datetime(2020, 1, 1), func)
# Here's another example scheduling a job to run at a specific date and time (in UTC),
# complete with args and kwargs.
scheduler.enqueue_at(datetime(2020, 1, 1, 3, 4), func, foo, bar=baz)
The second way is using enqueue_in
. Instead of taking a datetime
object,
this method expects a timedelta
and schedules the job to run at
X seconds/minutes/hours/days/weeks later. For example, if we want to monitor how
popular a tweet is a few times during the course of the day, we could do something like::
from datetime import timedelta
# Schedule a job to run 10 minutes, 1 hour and 1 day later
scheduler.enqueue_in(timedelta(minutes=10), count_retweets, tweet_id)
scheduler.enqueue_in(timedelta(hours=1), count_retweets, tweet_id)
scheduler.enqueue_in(timedelta(days=1), count_retweets, tweet_id)
As of version 0.3, RQ Scheduler
_ also supports creating periodic and repeated jobs.
You can do this via the schedule
method. Note that this feature needs
RQ
_ >= 0.3.1.
This is how you do it::
scheduler.schedule(
scheduled_time=datetime.now(), # Time for first execution, in UTC timezone
func=func, # Function to be queued
args=[arg1, arg2], # Arguments passed into function when executed
kwargs={'foo': 'bar'}, # Keyword arguments passed into function when executed
interval=60, # Time before the function is called again, in seconds
repeat=10 # Repeat this number of times (None means repeat forever)
)
Sometimes you need to know which jobs have already been scheduled. You can get a
list of enqueued jobs with the get_jobs
method::
list_of_job_instances = scheduler.get_jobs()
In it's simplest form (as seen in the above example) this method returns a list of all job instances that are currently scheduled for execution.
Additionally the method takes two optional keyword arguments until
and
with_times
. The first one specifies up to which point in time scheduled jobs
should be returned. It can be given as either a datetime / timedelta instance
or an integer denoting the number of seconds since epoch (1970-01-01 00:00:00).
The second argument is a boolen that determines whether the scheduled execution
time should be returned along with the job instances.
Example::
# get all jobs until 2012-11-30 10:00:00
list_of_job_instances = scheduler.get_jobs(until=datetime(2012, 10, 30, 10))
# get all jobs for the next hour
list_of_job_instances = scheduler.get_jobs(until=timedelta(hours=1))
# get all jobs with execution times
jobs_and_times = scheduler.get_jobs(with_times=True)
# returns a list of tuples:
# [(<rq.job.Job object at 0x123456789>, datetime.datetime(2012, 11, 25, 12, 30)), ...]
You can check whether a specific job instance or job id is scheduled for
execution using the familiar python in
operator::
if job_instance in scheduler:
# Do something
# or
if job_id in scheduler:
# Do something
To cancel a job, simply do:
scheduler.cancel(job)
RQ Scheduler
_ comes with a script rqscheduler
that runs a scheduler
process that polls Redis once every minute and move scheduled jobs to the
relevant queues when they need to be executed::
# This runs a scheduler process using the default Redis connection
rqscheduler
If you want to use a different Redis server you could also do::
rqscheduler --host localhost --port 6379 --db 0
The script accepts these arguments:
-H
or --host
: Redis server to connect to-p
or --port
: port to connect to-d
or --db
: Redis db to use-P
or --password
: password to connect to RedisThe arguments pull default values from environment variables with the
same names but with a prefix of RQ_REDIS_
.
-v
or --verbose
argument
to rqscheduler
script for more verbose logging.scheduler.schedule(scheduled_time=now, func='foo.bar')
.
Thanks @SirScott !rqscheduler
script now accepts floating point intervals. Thanks Alexander Pikovsky!rqscheduler
script now accepts --pid
argument. Thanks @jsoncorwin!Scheduler.schedule
now allows job timeout
to be specifiedrqscheduler
allows Redis connection to be specified via --url
argumentrqscheduler
now accepts --path
argumentrqscheduler
refusing to start after
an unexpected shut down.StrictRedis
interval
and repeat
) are now stored
in job.meta
introduced in RQ 0.3.4job in scheduler
syntaxscheduler.get_jobs
methodscheduler.enqueue
and scheduler.enqueue_periodic
will now raise a
DeprecationWarning, please use scheduler.schedule
insteadRQ
_ >= 0.3.1scheduler.enqueue
FAQs
Provides job scheduling capabilities to RQ (Redis Queue)
We found that rq-scheduler-ng demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.