MiniHuey provides a very lightweight huey-like API that may be
useful for certain classes of applications. Unlike
MiniHuey consumer runs inside a greenlet in your main application process.
This means there is no separate consumer process to run, not is there any
persistence for the enqueued/scheduled tasks; whenever a task is enqueued or is
scheduled to run, a new greenlet is spawned to execute the task.
Usage and task declaration:
MiniHuey([name='huey'[, interval=1[, pool_size=None]]])¶
- name (str) – Name given to this huey instance.
- interval (int) – How frequently to check for scheduled tasks (seconds).
- pool_size (int) – Limit number of concurrent tasks to given size.
from huey import crontab from huey.contrib.minimal import MiniHuey huey = MiniHuey() @huey.task() def fetch_url(url): return urllib2.urlopen(url).read() @huey.task(crontab(minute='0', hour='4')) def run_backup(): pass
There is not a separate decorator for periodic, or crontab, tasks. Just
MiniHuey.task() and pass in a validation function.
When your application starts, be sure to start the
from gevent import monkey; monkey.patch_all() huey.start() # Kicks off scheduler in a new greenlet. start_wsgi_server() # Or whatever your main application is doing...
Tasks enqueued manually for immediate execution will be run regardless of
whether the scheduler is running. If you want to be able to schedule tasks
in the future or run periodic tasks, you will need to call
Calling tasks and getting results works about the same as regular huey:
async_result = fetch_url('https://www.google.com/') html = async_result.get() # Block until task is executed. # Fetch the Yahoo! page in 30 seconds. async_result = fetch_url.schedule(args=('https://www.yahoo.com/',), delay=30) html = async_result.get() # Blocks for ~30s.