Heroku上的Redis Queue和Flask应用程序一直在计时



各位开发人员/伙伴好。

我正在开发一个聊天机器人,它使用自然语言处理(NLP(将文本转录成一个开始&完成位置。它托管在Heroku上,我使用Flask作为网络应用程序。我必须通过调用GET/init路由(使用我最喜欢的浏览器(来初始化我的NLP。这个init过程非常耗时,所以我决定把它放在Redis队列工作程序中。

我在这里学习了本教程:https://devcenter.heroku.com/articles/python-rq

问题是:我在heroku上的web dyno总是超时,我的init似乎不是在worker dyno中启动的,而是在web dyno中。

所以我得到了我的app.py文件:

from naturalLanguageProcessing import Nlp
from rq import Queue
from worker import conn
import redis
from flask import Flask
from flask import request
from flask import abort
app = Flask(__name__)
""" Reset the NLP - delete the model & train it again - THIS IS THE TIME CONSUMING FUNCTION """
def resetNlp():
NLP = Nlp()
NLP.reset()
NLP.train()
""" Init chatbot, IA, and others stuff """
@app.route('/init', methods=['GET'])
def init_entry():
# Create redis queue
q = Queue(connection=conn)
# Queue reset nlp
q.enqueue(resetNlp(), result_ttl=0, job_timeout=3600)
return 'Chatbot initialized !'

这是我的worker.py文件:

import os
import redis
from rq import Worker, Queue, Connection
listen = ['high', 'default', 'low']
redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')
conn = redis.from_url(redis_url)
if __name__ == '__main__':
with Connection(conn):
print('Launching redis worker...')
worker = Worker(map(Queue, listen))
worker.work()

对于我的Procfile(定义dynos(,我有:

web: gunicorn app:app
worker: python -u worker.py

当我进入/init时,这是我从网络应用程序中得到的响应:

heroku[router] error at=error code=H12 desc="Request timeout" method=GET path="/init" request_id=XXXXXXXXXXXXXXXXXXX fwd="xx.xxxx.xxxxx.xx" dyno=web.1 connect=2ms service=30001ms status=503 bytes=0 protocol=https
app[web] CRITICAL [2020-11-03 19:37:38 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:18)
app[web] INFO [2020-11-03 19:37:38 +0000] [18] [INFO] Worker exiting (pid: 18)
app[web] INFO [2020-11-03 19:37:38 +0000] [32] [INFO] Booting worker with pid: 32

我应该初始化一个聊天机器人响应,redis工作程序在init进程中继续。。。。

开发人员同事们,你们对如何解决我的问题有什么想法吗?感谢您未来的帮助:(

我认为您应该有q.enqueue(resetNlp, result_ttl=0, job_timeout=3600)。所以你传递了一个将要执行的函数
但您所做的是将resetNlp()排队,它有效地执行了这个函数,显然需要足够的时间来评估,从而使您的HTTP请求超时。

相关内容

  • 没有找到相关文章

最新更新