Flask and RQ example for Heroku
I have been struggling to find any example on the Internet on how to do long polling on Heroku with Flask and RQ. I know it’s relatively easy, but I just want to make it clear for my future self.
It’s really simple.
@app.route('/get_word_count', methods=['POST']) def get_word_count(): data_json = json.loads(request.data) job = q.enqueue(word_counter.count_words, data_json["sentence"]) return job.key @app.route("/get_word_count_result/<job_key>", methods=['GET']) def get_word_count_result(job_key): job_key = job_key.replace("rq:job:", "") job = Job.fetch(job_key, connection=conn) if(not job.is_finished): return "Not yet", 202 else: return str(job.result), 200
The key is here
job = Job.fetch(job_key, connection=conn)
The fetch command is used to get the job by job_id, you can also use
as well, but I just want to make it clear that if there are more concurrent requests coming in, I’ll get the right result back.
I posted an example here. https://github.com/noppanit/heroku-flask-rq-worker
Til next time,
noppanit at 00:00