Saat ini saya sedang mengerjakan proyek python yang memerlukan penerapan beberapa pekerjaan latar belakang (kebanyakan untuk pengiriman email dan pembaruan basis data yang besar). Saya menggunakan Redis untuk tugas broker. Jadi saat ini saya punya dua kandidat: Seledri dan RQ . Saya memiliki pengalaman dengan antrean pekerjaan ini, tetapi saya ingin meminta kalian berbagi pengalaman menggunakan alat ini. Begitu.
- Apa pro dan kontra menggunakan Celery vs. RQ.
- Setiap contoh proyek / tugas yang cocok untuk menggunakan Celery vs. RQ.
Seledri terlihat cukup rumit tetapi ini adalah solusi berfitur lengkap. Sebenarnya saya rasa saya tidak membutuhkan semua fitur ini. Dari sisi lain RQ sangat sederhana (misalnya konfigurasi, integrasi), tetapi tampaknya RQ tidak memiliki beberapa fitur yang berguna (misalnya pencabutan tugas, pemuatan ulang kode)
Jawaban:
Inilah yang saya temukan ketika mencoba menjawab pertanyaan yang sama persis. Ini mungkin tidak komprehensif, dan bahkan mungkin tidak akurat dalam beberapa hal.
Singkatnya, RQ dirancang agar lebih sederhana. Seledri dirancang agar lebih kuat. Keduanya luar biasa.
Pemantauan. Bunga Celery dan dasbor RQ keduanya sangat mudah diatur dan memberi Anda setidaknya 90% dari semua informasi yang Anda inginkan
Dukungan broker. Seledri adalah pemenangnya, RQ hanya mendukung Redis. Ini berarti lebih sedikit dokumentasi tentang "apa itu broker", tetapi juga berarti Anda tidak dapat beralih broker di masa mendatang jika Redis tidak lagi berfungsi untuk Anda. Misalnya, Instagram menganggap Redis dan RabbitMQ dengan Celery . Ini penting karena broker yang berbeda memiliki jaminan yang berbeda, misalnya Redis tidak dapat (pada saat penulisan) menjamin 100% bahwa pesan Anda terkirim.
Antrian prioritas. Model antrian prioritas RQ sederhana dan efektif - pekerja membaca dari antrian secara berurutan . Seledri membutuhkan pemintalan beberapa pekerja untuk mengkonsumsi dari antrian yang berbeda. Kedua pendekatan tersebut berhasil
Dukungan OS. Celery adalah pemenang yang jelas di sini, karena RQ hanya berjalan pada sistem yang mendukung
fork
misalnya sistem UnixDukungan bahasa. RQ hanya mendukung Python, sedangkan Celery memungkinkan Anda mengirim tugas dari satu bahasa ke bahasa lain
API. Celery sangat fleksibel (beberapa hasil backend, format konfigurasi yang bagus, dukungan kanvas alur kerja) tetapi tentu saja kekuatan ini bisa membingungkan. Sebaliknya, RQ api itu sederhana.
Dukungan subtugas. Celery mendukung subtugas (misalnya membuat tugas baru dari dalam tugas yang sudah ada). Saya tidak tahu apakah RQ melakukannya
Komunitas dan Stabilitas. Seledri mungkin lebih mapan, tetapi keduanya adalah proyek aktif. Saat penulisan, Celery memiliki ~ 3500 bintang di Github sementara RQ memiliki ~ 2000 dan kedua proyek menunjukkan perkembangan aktif
Menurut pendapat saya, Celery tidak serumit reputasinya yang mungkin membuat Anda percaya, tetapi Anda harus RTFM.
Jadi, mengapa ada orang yang mau menukar Celery (bisa dibilang lebih berfitur lengkap) untuk RQ? Dalam pikiran saya, semuanya bermuara pada kesederhanaan. Dengan membatasi dirinya pada Redis + Unix, RQ menyediakan dokumentasi yang lebih sederhana, basis kode yang lebih sederhana, dan API yang lebih sederhana. Ini berarti Anda (dan kontributor potensial untuk proyek Anda) dapat fokus pada kode yang Anda pedulikan, daripada harus menyimpan detail tentang sistem antrian tugas di memori kerja Anda. Kita semua memiliki batasan tentang berapa banyak detail yang dapat kita pikirkan sekaligus, dan dengan menghilangkan kebutuhan untuk menyimpan rincian antrian tugas di sana, RQ memungkinkan kembali ke kode yang Anda pedulikan. Kesederhanaan itu datang dengan mengorbankan fitur-fitur seperti antrian tugas antar-bahasa, dukungan OS yang luas, jaminan pesan yang 100% andal, dan kemampuan untuk beralih broker pesan dengan mudah.
sumber
Subtask support. Celery supports subtasks (e.g. creating new tasks from within existing tasks). I don't know if RQ does
Adapun 24.05.2019 RQ mendukung subtugas (panggilan batin untuk antrian) juga.Seledri tidak serumit itu. Pada intinya, Anda melakukan konfigurasi langkah demi langkah dari
tutorials
, membuatcelery
instance, menghias fungsi Anda dengan@celery.task
lalu menjalankan tugas denganmy_task.delay(*args, **kwargs)
.Menilai dari penilaian Anda sendiri, sepertinya Anda harus memilih antara kekurangan fitur (kunci) atau memiliki kelebihan berkeliaran. Pilihan itu tidak terlalu sulit dalam buku saya.
sumber
No such file or directory
. Saya tidak tahu harus mulai dari mana. Saya akan mencoba RQ untuk pertama kalinya malam ini.