django-celery异步任务,同个task有没法设置阻塞

发布于 2021-12-02 03:54:47 字数 426 浏览 994 评论 1

情景是这样子的,

1.有一个请求的处理比较耗时比如10s(比如去热更新服务器的数据)

2.采用异步处理后,可以保证这个耗时的处理不会影响到django的其他请求访问。

3.现在希望这个任务在执行的时候,能够按请求的顺序依次执行完毕。

@task
def add(x, y):
    print 'celery_task'
    time.sleep(10)
    return x + y

比如上面这个task,一请求去异步调用add方法,在第5秒的时候,又一个请求要调用add方法,我希望可以等第一个add执行完毕之后,再去开始执行第二个add方法,也就是两次print相隔10s。有没办法达到这样的效果

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

惜醉颜 2021-12-02 05:56:33

解决了,启动worker的时候加参数 -P threads,把程序切换成多线程模式

然后在方法中加加入result的参数

--tasks.py

@task

def add(r, x, y):

    if r:

        time_wait = 0

        while not r.ready():

            print r.state

            time.sleep(1)

            time_wait += 1

            if time_wait > 10:

                break

    print 'celery_task'

    time.sleep(10)

    return x + y

--views.py中

result = None
def index(req):
    global result
    result = add.delay(result, 1, 2)
    return HttpResponse(11111)

这样就可以达到效果拉

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文