LoginSignup
0
0

Django + heroku で非同期処理をするとき, 別プロセスからdjangoのデータベースにアクセスする方法

Last updated at Posted at 2023-08-20

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

以下のツールを使用すると上記のような対応を
しなくても使用することができるようです

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0