如何解决RQ多个任务H12 Heroku超时?

时间:2019-03-08 01:54:53

标签: python heroku flask redis

我正在尝试使用Redis运行heroku flask python应用程序。但是,我遇到以下错误:

at=error code=H12 desc="Request timeout" method=POST path="/uploaderlocal" host=a2n.herokuapp.com dyno=web.1 connect=1ms service=31890ms status=503 bytes=0 protocol=https

heroku网页由于上述错误而崩溃(由于超时),但是后台进程将继续运行。在redis后台队列中的任务完成之前,有什么方法可以停止heroku网页吗?以下是我的代码供您参考。请注意,我要先完成多个Redis排队任务,然后再返回results.html模板。

from rq import Queue

from worker import conn

from rq.job import Job
app = Flask(__name__)
q = Queue(connection=conn)

job1 = q.enqueue_call(func=method1(), args=(), timeout='1h')

job2 = q.enqueue_call(func=method2(), args=(), timeout='1h')

job3 = q.enqueue_call(func=method3(), args=(), timeout='1h')

job4 = q.enqueue_call(func=method4(), args=(), timeout='1h')

the below code attempts (but fails) to stall the return of the #html template before the processes are finished

while(len(q)>0):

time.sleep(1)

return render_template('result.html')

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我认为您必须在time.sleep(1)命令前面留一些空格?

在while循环内,变量q的值不会随时更改。因此它将永久睡眠或直接退出。

您需要在while循环中重新评估q,可能如下:

    while True:
        time.sleep(1)
        q = Queue(connection=conn)
        if len(q) == 0:      
            break