django-q, 面向 Django的多处理分布式任务队列

分享于 

5分钟阅读

GitHub

  繁體 雙語
A multiprocessing task queue application for Django
  • 源代码名称:django-q
  • 源代码网址:http://www.github.com/Koed00/django-q
  • django-q源代码文档
  • django-q源代码下载
  • Git URL:
    git://www.github.com/Koed00/django-q.git
    Git Clone代码到本地:
    git clone http://www.github.com/Koed00/django-q
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/Koed00/django-q
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    Q logo

    用于 Django的多处理器分布式任务队列

    image0image1Documentation Statusimage2

    特性

    • 多重处理工作池
    • 异步任务
    • 计划和重复的任务
    • 加密和压缩的软件包
    • 失败和成功的数据库或者缓存
    • 结果钩子,组和链
    • Django 管理集成
    • 与多个实例兼容的PaaS
    • 多群集监视器
    • Redis,Disque,IronMQ,SQS,MongoDB或者 ORM
    • Rollbar和岗哨支持

    要求

    测试:python 2.7 & 3.6. Django 1.8.18,1.11.9和 2.0

    代理

    安装

    • 使用pip安装最新版本:

      
      
      
      
      $ pip install django-q
      
      
      
      
      
    • 将django_q添加到项目 settings.py 中的INSTALLED_APPS:

      
      
      
      
      INSTALLED_APPS = (
      
      
       # other apps
      
      
       'django_q',
      
      
      )
      
      
      
      
      
    • 运行 Django 迁移以创建数据库表:

      
      
      
      
      $ python manage.py migrate
      
      
      
      
      
    • 选择message代理,配置并安装相应的客户机库。

    阅读 https://django-q.readthedocs.org的完整文档。

    配置

    所有配置设置都是可选的。 例如

    
    
    
    
    # settings.py example
    
    
    Q_CLUSTER = {
    
    
     'name': 'myproject',
    
    
     'workers': 8,
    
    
     'recycle': 500,
    
    
     'timeout': 60,
    
    
     'compress': True,
    
    
     'cpu_affinity': 1,
    
    
     'save_limit': 250,
    
    
     'queue_limit': 500,
    
    
     'label': 'Django Q',
    
    
     'redis': {
    
    
     'host': '127.0.0.1',
    
    
     'port': 6379,
    
    
     'db': 0, }
    
    
    }
    
    
    
    

    有关完整配置选项,请参见配置文档

    管理命令

    启动一个群集:

    
    
    
    
    $ python manage.py qcluster
    
    
    
    
    

    使用以下方法监视群集:

    
    
    
    
    $ python manage.py qmonitor
    
    
    
    
    

    使用以下方法检查总体统计信息:

    
    
    
    
    $ python manage.py qinfo
    
    
    
    
    

    创建任务

    使用代码中的异步来快速卸载任务:

    
    
    
    
    from django_q.tasks import async, result
    
    
    
    # create the task
    
    
    async('math.copysign', 2, -2)
    
    
    
    # or with a reference
    
    
    import math.copysign
    
    
    
    task_id = async(copysign, 2, -2)
    
    
    
    # get the result
    
    
    task_result = result(task_id)
    
    
    
    # result returns None if the task has not been executed yet
    
    
    # you can wait for it
    
    
    task_result = result(task_id, 200)
    
    
    
    # but in most cases you will want to use a hook:
    
    
    
    async('math.modf', 2.5, hook='hooks.print_result')
    
    
    
    # hooks.py
    
    
    def print_result(task):
    
    
     print(task.result)
    
    
    
    

    有关更多信息,请参见任务

    计划

    明细表是常规 Django 模型。 你可以通过管理页面或者直接从代码管理它们:

    
    
    
    
    # Use the schedule function
    
    
    from django_q.tasks import schedule
    
    
    
    schedule('math.copysign',
    
    
     2, -2,
    
    
     hook='hooks.print_result',
    
    
     schedule_type=Schedule.DAILY)
    
    
    
    # Or create the object directly
    
    
    from django_q.models import Schedule
    
    
    
    Schedule.objects.create(func='math.copysign',
    
    
     hook='hooks.print_result',
    
    
     args='2,-2',
    
    
     schedule_type=Schedule.DAILY
    
    
     )
    
    
    
    # Run a task every 5 minutes, starting at 6 today
    
    
    # for 2 hours
    
    
    import arrow
    
    
    
    schedule('math.hypot',
    
    
     3, 4,
    
    
     schedule_type=Schedule.MINUTES,
    
    
     minutes=5,
    
    
     repeats=24,
    
    
     next_run=arrow.utcnow().replace(hour=18, minute=0))
    
    
    
    

    有关更多信息,请查看计划文档文档。

    测试

    要运行测试,需要使用 py.testpytest-django。

    待办事项

    • 更好的测试和覆盖
    • 较少依赖项?

    确认


    相关文章