


Artikel ini meneroka keutamaan tugas dalam Celery, berdasarkan catatan sebelumnya tentang pemprosesan adil. Keutamaan tugas menawarkan cara untuk meningkatkan keadilan dan kecekapan dalam pemprosesan latar belakang dengan menetapkan tahap keutamaan yang berbeza kepada tugas berdasarkan kriteria tersuai.
Mengapa Keutamaan Tahap Tugasan?
Keutamaan peringkat tugas memberikan kawalan terperinci ke atas pelaksanaan tugas tanpa pelaksanaan yang rumit. Dengan menyerahkan semua tugasan ke baris gilir tunggal dengan nilai keutamaan yang ditetapkan, pekerja boleh memproses tugas berdasarkan keperluan mendesak mereka. Ini memastikan pengendalian yang adil tanpa mengira masa penyerahan.
Sebagai contoh, jika seorang penyewa menyerahkan 100 tugasan dan seorang lagi menyerahkan 5 sejurus selepas itu, keutamaan peringkat tugas menghalang penyewa kedua daripada menunggu semua 100 tugasan selesai.
Pendekatan ini memberikan keutamaan secara dinamik berdasarkan kiraan tugas penyewa. Tugas pertama setiap penyewa bermula dengan keutamaan yang tinggi, tetapi dengan setiap 10 tugasan serentak, keutamaan berkurangan. Ini memastikan penyewa yang mempunyai tugas yang lebih sedikit tidak mengalami kelewatan yang tidak perlu.
Melaksanakan Keutamaan Tugas
Mula-mula, pasang Saderi dan Redis:
pip install celery redis
Konfigurasikan Celery untuk menggunakan Redis sebagai broker dan dayakan pemprosesan tugas berasaskan keutamaan:
from celery import Celery app = Celery( "tasks", broker="redis://localhost:6379/0", broker_connection_retry_on_startup=True, ) app.conf.broker_transport_options = { "priority_steps": list(range(10)), "sep": ":", "queue_order_strategy": "priority", }
Tentukan kaedah untuk mengira keutamaan dinamik menggunakan Redis untuk cache setiap kiraan tugas penyewa:
import redis redis_client = redis.StrictRedis(host="localhost", port=6379, db=1) def calculate_priority(tenant_id): """ Calculate task priority based on the number of tasks for the tenant. """ key = f"tenant:{tenant_id}:task_count" task_count = int(redis_client.get(key) or 0) return min(10, task_count // 10)
Buat kelas tugas tersuai untuk mengurangkan kiraan tugas apabila berjaya disiapkan:
from celery import Task class TenantAwareTask(Task): def on_success(self, retval, task_id, args, kwargs): tenant_id = kwargs.get("tenant_id") if tenant_id: key = f"tenant:{tenant_id}:task_count" redis_client.decr(key, 1) return super().on_success(retval, task_id, args, kwargs) @app.task(name="tasks.send_email", base=TenantAwareTask) def send_email(tenant_id, task_data): """ Simulate sending an email. """ sleep(1) key = f"tenant:{tenant_id}:task_count" task_count = int(redis_client.get(key) or 0) logger.info("Tenant %s tasks: %s", tenant_id, task_count)
Cetuskan tugas untuk penyewa yang berbeza, memastikan tenant_id disertakan dalam hujah kata kunci tugas:
if __name__ == "__main__": tenant_id = 1 for _ in range(100): priority = calculate_priority(tenant_id) key = f"tenant:{tenant_id}:task_count" redis_client.incr(key, 1) send_email.apply_async( kwargs={"tenant_id": tenant_id, "task_data": {}}, priority=priority ) tenant_id = 2 for _ in range(10): priority = calculate_priority(tenant_id) key = f"tenant:{tenant_id}:task_count" redis_client.incr(key, 1) send_email.apply_async( kwargs={"tenant_id": tenant_id, "task_data": {}}, priority=priority )
Anda boleh melihat kod penuh di sini.
Mulakan pekerja Saderi dan cetuskan tugas:
# Run the worker celery -A tasks worker --loglevel=info # Trigger the tasks python tasks.py
Persediaan ini menunjukkan bagaimana baris gilir keutamaan Celery, digabungkan dengan Redis, memastikan pemprosesan tugas yang adil dengan melaraskan keutamaan secara dinamik berdasarkan aktiviti penyewa. Mari lihat keluaran pekerja yang dipermudahkan:
Kesimpulan
Keutamaan peringkat tugas dengan Celery dan Redis menyediakan penyelesaian yang mantap untuk memastikan pemprosesan yang adil dalam sistem berbilang penyewa. Dengan menetapkan keutamaan secara dinamik dan memanfaatkan satu baris gilir, anda boleh mengekalkan kesederhanaan sambil memenuhi keperluan perniagaan.
Terdapat banyak cara untuk melaksanakan keutamaan peringkat tugas, contohnya menggunakan RabbitMQ adalah lebih cekap kerana ia menyokong keutamaan pada terasnya tetapi memandangkan kami juga menggunakan Redis untuk pengiraan tugas, ia memudahkan keseluruhan seni bina kami.
Semoga anda mendapati ini berguna dan lihat pada yang seterusnya!
Atas ialah kandungan terperinci Memastikan Pemprosesan Adil dengan Saderi - Bahagian II. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel ini membincangkan pernyataan baru "Match" Python yang diperkenalkan dalam versi 3.10, yang berfungsi sebagai setara dengan menukar pernyataan dalam bahasa lain. Ia meningkatkan kebolehbacaan kod dan menawarkan manfaat prestasi ke atas tradisional if-elif-el

Kumpulan Pengecualian dalam Python 3.11 Membenarkan mengendalikan pelbagai pengecualian secara serentak, meningkatkan pengurusan ralat dalam senario serentak dan operasi kompleks.

Fungsi anotasi dalam python Tambah metadata ke fungsi untuk pemeriksaan jenis, dokumentasi, dan sokongan IDE. Mereka meningkatkan kebolehbacaan kod, penyelenggaraan, dan penting dalam pembangunan API, sains data, dan penciptaan perpustakaan.

Artikel ini membincangkan ujian unit di Python, faedah mereka, dan bagaimana menulisnya dengan berkesan. Ia menyoroti alat seperti Unittest dan Pytest untuk ujian.

Artikel membincangkan penentu akses dalam Python, yang menggunakan konvensyen penamaan untuk menunjukkan keterlihatan ahli kelas, dan bukan penguatkuasaan yang ketat.

Artikel membincangkan kaedah Python \ _ _ _ _ _ \ _ () dan peranan diri dalam memulakan atribut objek. Kaedah kelas lain dan kesan warisan pada \ _ _ _ init \ _ \ _ () juga dilindungi.

Artikel ini membincangkan perbezaan antara @classmethod, @staticmethod, dan kaedah contoh dalam python, memperincikan sifat mereka, kes penggunaan, dan faedah. Ia menerangkan cara memilih jenis kaedah yang betul berdasarkan fungsi yang diperlukan dan da

Inpython, youAppendElementStoalistusingTheAppend () method.1) useAppend () forsingLements: my_list.append (4) .2) useextend () or = formultipleelements: my_list.extend (lain_list) ormy_list = [4,5,6] .3) UseInsert () ForSpecificPositions: my_list.insert (1,5) .beaware


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

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

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

mPDF
mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.
