V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ericls
V2EX  ›  分享创造

去年写的一个小 library —— Django 3 不需要额外 worker 的后台任务处理

  •  2
     
  •   ericls ·
    ericls · 2020-05-21 04:57:28 +08:00 · 1979 次点击
    这是一个创建于 1436 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简单用例:

    from django_simple_task import defer
    
    def task1():
        time.sleep(1)
        print("task1 done")
    
    async def task2():
        await asyncio.sleep(1)
        print("task2 done")
    
    def view(requests):
        defer(task1)
        defer(task2)
        return HttpResponse(b"My View")
    

    这里 task1 和 task2 都会在 view 返回后执行。

    这个东西不能替代 celery,只适合一些简短且不 critical 的任务。虽有有一些机制控制并发数量和结束应用前等待队列清空。

    这个原理很简单,但是如果每个项目都自己写一个又很麻烦 所以就整理了一下。 有兴趣的请点下面的链接:

    View on PyPI

    View on GitHub

    Read the docs

    4 条回复    2020-05-22 10:17:18 +08:00
    qW7bo2FbzbC0
        1
    qW7bo2FbzbC0  
       2020-05-21 17:18:40 +08:00
    django-q 除了强制时区的问题以外,挺好用的
    ericls
        2
    ericls  
    OP
       2020-05-22 02:52:07 +08:00
    @hjahgdthab750 是的 django-q 用过两次 觉得可以代替 celery 。 但是 Celery 毕竟还是最熟悉
    qW7bo2FbzbC0
        3
    qW7bo2FbzbC0  
       2020-05-22 09:37:45 +08:00
    @ericls celery 实在是太重了
    ericls
        4
    ericls  
    OP
       2020-05-22 10:17:18 +08:00 via iPhone
    @hjahgdthab750 项目更重的时候 celery 就显得很轻了 哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5419 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:47 · PVG 15:47 · LAX 00:47 · JFK 03:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.