django-celery异步任务,同个task有没法设置阻塞
情景是这样子的,
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
解决了,启动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)
这样就可以达到效果拉