Gunakan SQLite sebagai broker Celery di Django

Redis and RabbitMQ may be the go-to brokers when using Celery, but when you're developing locally they can feel like overkill. The documentation for Celery 5.4 mentions that you can use SQLite as an experimental broker for local development. However, when you navigate to Celery's backends and brokers page, the only mentions of SQL are for the SQLAlchemy backend. Thankfully, the page notes that, "this section is not comprehensive of backends and brokers."
This post will show you how to implement an SQLite broker (or any SQL!) for Celery in a Django project. This post will not teach you to use Celery: check out the official Celery documentation for that.
Before we begin
For the purposes of this post, we will assume that you already have an existing Django project with Celery installed using the steps from Celery's official "First steps with Django" guide. A Celery backend is not required, but you may want to follow the guide's steps for installing and configuring django-celery-results. If you're unclear on what the difference is between backends and brokers, check out my article "Understanding tasks, brokers, workers, and backends in Celery."
All links to source documentation will be for current versions of Django, Celery, and SQLAlchemy at the time of publication (July, 2024), except where explicitly stated otherwise. If you're reading this in the distant future, things may have changed.
Setting up the SQL Broker
While Celery manages tasks and queues, it delegates to another library called Kombu for exchanging messages with the broker. RabbitMQ and Redis are Kombu's most feature-complete transports (brokers), but it also has virtual transports for Amazon SQS, ZooKeeper, and MongoDB.
Tucked away in the far corners of Kombu's documentation, there is an SQLAlchemy Transport Model that supports PostgreSQL, MySQL, and SQLite. Once upon a time the SQLAlchemy broker was even documented on Celery's website, but it has since been removed from the docs in newer versions of the library. Nonetheless, it still works well enough for local development.
To use a sequel database as a Celery broker in your Django app, first install SQLAlchemy:
pip install SQLAlchemy
Within your Django project's settings.py file, you can set your broker's backend using the CELERY_BROKER_URL setting:
# BASE_DIR is the directory of your project's main directory.
CELERY_BROKER_URL = f"sqlalchemy+sqlite:////{BASE_DIR}/broker.sqlite3"
The SQLAlchemy broker URL consists of 3 parts:
- The string sqlalchemy or sqla (they are interchangeable)
- A + sign
- A SQLAlchemy connection string
Connection strings are different for SQLite on Mac/Unix and Windows:
# MacOS/Unix CELERY_BROKER_URL = "sqla+sqlite:////your/project/path/broker.sqlite3" # Windows CELERY_BROKER_URL = "sqla+sqlite:///C:your\\project\\path\\broker.sqlite3"
You can also use Postgres as a Celery broker, or you can just as easily use MySQL as a Celery broker:
# MySQL CELERY_BROKER_URL = "sqlalchemy+mysql://scott:tiger@localhost/foo" # PostgreSQL CELERY_BROKER_URL = "sqla+postgresql://scott:tiger@localhost/mydatabase" # PosgreSQL connecting using pg8000 CELERY_BROKER_URL = "sqla+postgresql+pg8000://scott:tiger@localhost/mydatabase"
You may need to install other libraries to connect to MySQL or PostgreSQL, and what library you install may affect the SQLAlchemy connection string. Check the SQLAlchemy Database URL docs for more details.
Regardless of which database you choose, you may want to consider storing the broker URL in an environment variable to make it easy to change in different environments:
CELERY_BROKER_URL = os.getenv("CELERY_BROKER_URL")
A word of caution
The SQLAlchemy transport is likely considered experimental, and therefore it would not be intended for production usage. Data loss may occur, or messages could be delivered multiple times. Consider switching to a more robust broker that's listed on Celery's Brokers and Backends page.
That said, it might be fine for local development, or even small side projects. But I wouldn't be shocked if the ability to use SQLAlchemy as a broker went away in the future.
Next steps
With Celery running locally, you may begin working on your queue-powered application. However, you may find its lack of automatic reloading to be a point of friction. If you want to set up automatic Celery reloading in your Django application, read my post "Automatically reload Celery workers with a custom Django command."
Atas ialah kandungan terperinci Gunakan SQLite sebagai broker Celery di Django. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Alat AI Hot
Undress AI Tool
Gambar buka pakaian secara percuma
Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik
AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.
Clothoff.io
Penyingkiran pakaian AI
Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!
Artikel Panas
Alat panas
Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma
SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan
Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa
Dreamweaver CS6
Alat pembangunan web visual
SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)
Topik panas
Polimorfisme dalam kelas python
Jul 05, 2025 am 02:58 AM
Polimorfisme adalah konsep teras dalam pengaturcaraan berorientasikan objek Python, merujuk kepada "satu antara muka, pelbagai pelaksanaan", yang membolehkan pemprosesan bersatu pelbagai jenis objek. 1. Polimorfisme dilaksanakan melalui penulisan semula kaedah. Subkelas boleh mentakrifkan semula kaedah kelas induk. Sebagai contoh, kaedah bercakap () kelas haiwan mempunyai pelaksanaan yang berbeza dalam subkelas anjing dan kucing. 2. Penggunaan praktikal polimorfisme termasuk memudahkan struktur kod dan meningkatkan skalabilitas, seperti memanggil kaedah cabutan () secara seragam dalam program lukisan grafik, atau mengendalikan tingkah laku umum watak -watak yang berbeza dalam pembangunan permainan. 3. Polimorfisme pelaksanaan Python perlu memenuhi: Kelas induk mentakrifkan kaedah, dan kelas kanak -kanak mengatasi kaedah, tetapi tidak memerlukan warisan kelas induk yang sama. Selagi objek melaksanakan kaedah yang sama, ini dipanggil "jenis itik". 4. Perkara yang perlu diperhatikan termasuk penyelenggaraan
Bagaimana saya menulis 'Hello, World!' Yang mudah! program dalam python?
Jun 24, 2025 am 12:45 AM
"Hello, dunia!" Program adalah contoh paling asas yang ditulis dalam Python, yang digunakan untuk menunjukkan sintaks asas dan mengesahkan bahawa persekitaran pembangunan dikonfigurasi dengan betul. 1. Ia dilaksanakan melalui garis cetakan kod ("Hello, World!"), Dan selepas berlari, teks yang ditentukan akan dikeluarkan pada konsol; 2. Langkah -langkah berjalan termasuk memasang python, menulis kod dengan editor teks, menyimpan sebagai fail .py, dan melaksanakan fail di terminal; 3. Kesilapan umum termasuk kurungan atau petikan yang hilang, penyalahgunaan cetakan modal, tidak menyimpan format .py, dan kesilapan persekitaran yang menjalankan; 4. Alat pilihan termasuk terminal editor teks tempatan, editor dalam talian (seperti replit.com)
Apakah algoritma dalam Python, dan mengapa mereka penting?
Jun 24, 2025 am 12:43 AM
Algorithmmsinpythonareessentialforefficientplemlemen-solvinginprogramming.theyarestep-by-stepproceduresedtosolvetaskslikesorting, carian, anddatamanipulation.CommontypesincludesortalgorithmslinybineShmseCkeCkeCkeCkeCkeCkeCkeCkeCkeCkeCkeCkeCkeCkeCkeChmmsline, carianShmseKorithmseCkeCkeChmmmslareLineShmseKorithmmslareLineShmmslikeCkeCkeCksort,
Apakah senarai pengirim di Python?
Jun 29, 2025 am 02:15 AM
Listslicinginpythonextractsaportionofalistusingindices.1.itusesthesyntaxlist [start: end: step], wherestartislusive, endisexclusive, andstepdefinestheinterval.2.ifstartorendareomitt
Python `@Classmethod` Decorator dijelaskan
Jul 04, 2025 am 03:26 AM
Kaedah kelas adalah kaedah yang ditakrifkan dalam python melalui penghias @classmethod. Parameter pertamanya adalah kelas itu sendiri (CLS), yang digunakan untuk mengakses atau mengubah keadaan kelas. Ia boleh dipanggil melalui kelas atau contoh, yang mempengaruhi seluruh kelas dan bukannya contoh tertentu; Sebagai contoh, dalam kelas orang, kaedah show_count () mengira bilangan objek yang dibuat; Apabila menentukan kaedah kelas, anda perlu menggunakan penghias @classmethod dan namakan parameter pertama CLS, seperti kaedah change_var (new_value) untuk mengubah suai pembolehubah kelas; Kaedah kelas adalah berbeza daripada kaedah contoh (parameter diri) dan kaedah statik (tiada parameter automatik), dan sesuai untuk kaedah kilang, pembina alternatif, dan pengurusan pembolehubah kelas. Kegunaan biasa termasuk:
Argumen dan Parameter Fungsi Python
Jul 04, 2025 am 03:26 AM
Parameter adalah ruang letak apabila menentukan fungsi, sementara argumen adalah nilai khusus yang diluluskan ketika memanggil. 1. Parameter kedudukan perlu diluluskan, dan perintah yang salah akan membawa kepada kesilapan dalam hasilnya; 2. Parameter kata kunci ditentukan oleh nama parameter, yang boleh mengubah pesanan dan meningkatkan kebolehbacaan; 3. Nilai parameter lalai diberikan apabila ditakrifkan untuk mengelakkan kod pendua, tetapi objek berubah harus dielakkan sebagai nilai lalai; 4 Args dan *kwargs boleh mengendalikan bilangan parameter yang tidak pasti dan sesuai untuk antara muka umum atau penghias, tetapi harus digunakan dengan berhati -hati untuk mengekalkan kebolehbacaan.
Bagaimana saya menggunakan modul CSV untuk bekerja dengan fail CSV di Python?
Jun 25, 2025 am 01:03 AM
Modul CSV Python menyediakan cara mudah untuk membaca dan menulis fail CSV. 1. Apabila membaca fail CSV, anda boleh menggunakan csv.reader () untuk membaca garis mengikut baris dan mengembalikan setiap baris data sebagai senarai rentetan; Jika anda perlu mengakses data melalui nama lajur, anda boleh menggunakan csv.dictreader () untuk memetakan setiap baris ke dalam kamus. 2. Apabila menulis ke fail CSV, gunakan kaedah CSV.Writer () dan hubungi Writerow () atau Writerows () untuk menulis satu baris data tunggal atau berbilang; Jika anda ingin menulis data kamus, gunakan csv.dictwriter (), anda perlu menentukan nama lajur terlebih dahulu dan tulis tajuk melalui WriteHeader (). 3. Semasa mengendalikan kes kelebihan, modul secara automatik mengendalikannya
Terangkan penjana python dan iterators.
Jul 05, 2025 am 02:55 AM
Iterator adalah objek yang melaksanakan kaedah __iter __ () dan __Next __ (). Penjana adalah versi Iterator yang dipermudahkan, yang secara automatik melaksanakan kaedah ini melalui kata kunci hasil. 1. Iterator mengembalikan elemen setiap kali dia memanggil seterusnya () dan melemparkan pengecualian berhenti apabila tidak ada lagi elemen. 2. Penjana menggunakan definisi fungsi untuk menghasilkan data atas permintaan, menjimatkan memori dan menyokong urutan tak terhingga. 3. Menggunakan Iterator apabila memproses set sedia ada, gunakan penjana apabila menghasilkan data besar secara dinamik atau penilaian malas, seperti garis pemuatan mengikut baris apabila membaca fail besar. NOTA: Objek yang boleh diperolehi seperti senarai bukanlah pengaliran. Mereka perlu dicipta semula selepas pemalar itu sampai ke penghujungnya, dan penjana hanya boleh melintasi sekali.


