heroku公式が非同期処理の方法を公開している.
しかし上記サイトのworkerをそのまま使用したとき別スレッドでの処理で
データベースにアクセスできなかった
時間がかかる処理を別プロセスから行い結果をデータベースに保存したいとき
にdjangoのsetupを呼び出す必要があった.
下記プログラムのyour_appは自分のアプリ名を入力
import os
import redis
from rq import Worker, Queue, Connection
# 以下3行でdjangoのセットアップを行う
# your_appは自分のアプリ名を入力
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_app.settings')
django.setup()
listen = ['high', 'default', 'low']
redis_url = os.getenv('REDIS_URL', 'redis://localhost:6379')
conn = redis.from_url(redis_url)
if __name__ == '__main__':
with Connection(conn):
worker = Worker(map(Queue, listen))
worker.work()
2023/08/23 追記
以下のツールを使用すると上記のような対応を
しなくても使用することができるようです