08 Mar 2013

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
        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