Walaupun aplikasi web moden lebih pantas dan lebih mudah berbanding sebelum ini, masih terdapat banyak situasi di mana tugas berat perlu dimuat turun ke bahagian lain sistem dan bukannya melakukan kerja pada utas utama.
Contoh situasi ini ialah:
Jadi, bagaimana untuk menangani situasi ini? Pada masa ini, Saderi sangat berguna.
Celery ialah pelaksanaan baris gilir tugas sumber terbuka, selalunya digabungkan dengan rangka kerja web berasaskan Python seperti Flask dan Django, untuk melaksanakan tugas secara tidak segerak di luar kitaran tindak balas permintaan biasa.
Oleh itu, Celery pada asasnya ialah baris gilir tugas berdasarkan pemesejan yang diedarkan. Unit atau tugas pelaksanaan dilaksanakan secara serentak pada satu atau lebih pekerja menggunakan multiprocessing, gevent atau eventlet. Tugasan ini boleh dilaksanakan secara serentak (iaitu, tunggu sehingga bersedia) atau tidak segerak (iaitu, di latar belakang).
Saderi ialah baris gilir tugas yang diedarkan berdasarkan model pengeluar-pengguna.
Task Queue ialah mekanisme untuk mengagihkan kerja merentasi benang dan mesin, pada asasnya perantara mesej antara pengeluar (aplikasi web) dan pengguna (pekerja Saderi).
Saderi berinteraksi melalui mesej, dengan broker bertindak sebagai orang tengah antara pelanggan (pengeluar) dan pekerja (pengguna). Untuk memulakan tugas, pelanggan menolak mesej ke baris gilir, dan broker menyampaikan mesej kepada pekerja.
Sistem Saderi boleh terdiri daripada berbilang pekerja dan broker, yang memberikan kemungkinan ketersediaan tinggi dan pengembangan mendatar.
Ringkasnya, pelanggan Celery ialah pengeluar, yang menambah tugasan baharu pada baris gilir melalui broker mesej. Kemudian, pekerja Saderi juga mendapatkan tugas baru daripada baris gilir melalui broker mesej. Setelah diproses, hasilnya disimpan dalam bahagian belakang hasil.
Contoh berikut akan menggunakan RedisMQ sebagai broker mesej.
Pada sistem linux/macOS, jalankan pelayan Redis secara setempat dengan melaksanakan arahan berikut:
$ wget http://download.redis.io/redis-stable.tar.gz $ tar xvzf redis-stable.tar.gz $ rm redis-stable.tar.gz $ cd redis-stable $ make
Selepas menyediakan Redis, jalankan Redis oleh melaksanakan arahan berikut Pelayan:
$ redis-server
Pelayan berjalan pada port lalai 6379.
Mula-mula, sediakan projek Python secara setempat.
Saderi boleh dipasang melalui alat standard seperti pip atau easy_install. Pasang Celery dan Redis melalui arahan berikut:
pip install celery redis==4.3.4
Kini anda memerlukan tika Celery untuk menjalankan aplikasi Sebarang tugas yang dilaksanakan oleh Celery bermula dengan contoh, seperti mencipta dan mengurus tugas.
Buat fail tasks.py dalam projek:
From celery import Celery broker_url = 'redi://localhost:6379/0' app = Celery('tasks',broker = broker_url) @app.task def add(x, y): return x+y
Tambahan tugas mudah() ditakrifkan di sini, mengembalikan jumlah dua nombor.
Pada terminal, tukar ke lokasi projek dan jalankan pekerja Saderi dengan arahan berikut:
$ celery -A tasks worker - loglevel=info
Untuk maklumat lanjut tentang baris arahan pekerja Saderi , anda boleh menggunakan bantuan:
$ celery worker - help
Dalam Saderi, gunakan kaedah tunda() untuk memanggil tugasan.
Buka tetingkap terminal lain untuk projek anda dan jalankan arahan berikut:
$ python
Ini akan membuka baris arahan Python.
>> from tasks import add >> add.delay(1,2)
Ini akan mengembalikan tika AsyncResult, yang boleh digunakan untuk menyemak status tugasan, mendapatkan nilai pulangannya, menunggu tugasan selesai dan juga mendapatkan pengecualian dan jejak balik pada kegagalan.
Selepas menjalankan arahan add.delay(), tugasan akan ditolak ke baris gilir dan kemudian diperoleh oleh pekerja. Ini boleh disahkan pada terminal pekerja Saderi, di mana anda boleh melihat dengan jelas tugasan diterima dan kemudian diselesaikan dengan jayanya.
Atas ialah kandungan terperinci Pelajari Python Celery dan selesaikan tugas tak segerak dengan mudah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!