Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pelajari Python Celery dan selesaikan tugas tak segerak dengan mudah

Pelajari Python Celery dan selesaikan tugas tak segerak dengan mudah

WBOY
WBOYke hadapan
2023-04-23 15:31:161677semak imbas

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:

  • Tugas berkala – pekerjaan yang dijadualkan untuk dijalankan pada selang waktu tertentu. Contohnya, penjanaan laporan harian, bulanan.
  • Alat Pihak Ketiga - Aplikasi harus mengembalikan respons kepada pengguna dengan cepat, dan bukannya menunggu tugasan lain diselesaikan terlebih dahulu. Contohnya, hantar e-mel, pemberitahuan, sampaikan kemajuan kemas kini kepada alatan dalaman.
  • Pekerjaan jangka panjang – kerja yang melaksanakan kerja yang kompleks atau memerlukan sumber yang mahal dan memerlukan pengguna menunggu sehingga kerja itu selesai. Contohnya. Aliran kerja DAG, tugas berasaskan Map-Reduce, kerja Spark yang berjalan lama, dsb.

Jadi, bagaimana untuk menangani situasi ini? Pada masa ini, Saderi sangat berguna.

Apakah Saderi?

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).

轻松完成异步任务,一文搞懂Python Celery

Bagaimana Saderi berfungsi?

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 Berfungsi

Contoh berikut akan menggunakan RedisMQ sebagai broker mesej.

Sediakan Redis

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.

Sediakan aplikasi

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.

Jalankan Pekerja Saderi

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

Memanggil tugasan

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!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam