我有一个推荐网站。一切都工作得很花哨,直到网站流量不足的时候,建议需要超过30秒(Heroku的限制)和超时,抛出500错误。我发现http请求的时间很长。
所以,我在网上阅读并用Redis实现了RQ。我得到了它的工作,但经过一些测试,它仍然会抛出内部服务器错误,即使请求通过队列。
我真的只是缺乏知识而且我不知道该怎么做。我想我错过了整个rq和redis的想法吗?这是我的一些代码,如果它有帮助,但我希望更多的指导从这里去修复此错误。
worker.py
import os
import redis
from rq import Worker, Queue, Connection
listen = ['high', 'default', 'low']
redis_url = os.getenv('REDISTOGO_URL',
'redis://redistogo:sampleurl:portNo/')
if not redis_url:
raise RuntimeError('Set up Redis to go first.')
conn = redis.from_url(redis_url)
if __name__=='__main__':
with Connection(conn):
worker = Worker(map(Queue, listen))
worker.work()
我的views.py
的一部分q = Queue(connection=conn)
@app.route('/')
def home():
form = ArtistsForm()
return render_template('home.html', form=form)
@app.route('/results', methods=['POST'])
def results():
form = ArtistsForm()
error = None
try:
if request.method == 'POST' and form.validate():
table = 'Artists'
artists = []
for value in form.data.items():
if (value[1] is not ''):
artists.append(value[1])
results = q.enqueue_call(func=getArtists, args=(table, *artists))
while results.result is None:
time.sleep(1)
results = results.result.values.tolist()
return render_template('results.html', results=results)
else:
error = "Please be sure to enter 5 artists with correct spelling" \
" and punctuation"
except pylast.WSError:
return render_template('error.html')
return render_template('home.html', form=form, error=error)
感谢任何指导
答案 0 :(得分:0)
您总是可以尝试在网络测功机之间划分工作,以简单地确认请求,然后让工人测功机进行繁重的工作。
Kafka或类似的东西可以用来完成此任务。