Rumah pembangunan bahagian belakang Tutorial Python Gunakan SQLite sebagai broker Celery di Django

Gunakan SQLite sebagai broker Celery di Django

Jul 25, 2024 pm 02:51 PM

Use SQLite as a Celery broker in 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:

  1. The string sqlalchemy or sqla (they are interchangeable)
  2. A + sign
  3. 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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Oguri Cap Build Guide | Musume Derby Pretty
3 minggu yang lalu By Jack chen
Agnes Tachyon Build Guide | Musume Derby Pretty
3 minggu yang lalu By Jack chen
Puncak bagaimana untuk emote
4 minggu yang lalu By Jack chen

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Polimorfisme dalam kelas python 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? 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? 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? 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 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 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? 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. 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.

See all articles