Black Showman dan Pembunuhan di Kota Tak BernamaPembunuhan bisa terjadi di mana saja, termasuk di sebuah kota kecil, terpencil, dan nyaris terlupakan di tengah pandemi Covid-19. Seorang mantan guru SMP ditemukan tewas tercekik di halaman rumahnya sendiri. Buy |
Celery adalah system penggelola antrian (task-queue) yang menangani distribusi task pada workers. Celery membuat menajemen task asinkron menjadi mudah, aplikasi anda hanya perlu mendorong pesan ke broker seperti RabbitMQ.
Celery dapat digunakan dalam berbagai konfigurasi. Salah satunya yang sering digunakan adalah mengelola task asinkron yang panjang pada aplikasi web, contohnya seperti pembuatan thumbnail saat pengguna memposting gambar.
Di artikel sebelumnya kita telah membahas tentang message broker dengan RabbitMQ. sebelum mengikuti tutorial ini pastikan bahwa kamu telah bekerja di lingkungan environment, kalau belum pelajari terlebih dahulu bagaimana cara membuat virtual environment untuk project python anda ?.
from celery import Celery
import urllib.request
import os# Where the downloaded files will be stored
BASEDIR="/home/pyton_project/alfin/samplecelery"# Create the app and set the broker location (RabbitMQ)
app = Celery('downloaderApp',
backend='rpc://',
broker='pyamqp://guest@localhost//')@app.task
def download(url, filename):
"""
Download a page and save it to the BASEDIR directory
url: the url to download
filename: the filename used to save the url in BASEDIR
"""
response = urllib.request.urlopen(url)
data = response.read()
with open(BASEDIR+"/"+filename,'wb') as file:
file.write(data)
file.close()@app.task
def list():
""" Return an array of all downloaded files """
return os.listdir(BASEDIR)
Semua keajaiban terjadi di anotasi @app.task. Ini memberitahu celery bahwa fungsi ini tidak akan berjalan pada client, tetapi dikirim ke workers melalui RabbitMQ. Semua konfigurasi celery terjadi di baris berikut:
app = Celery('downloaderApp', backend='rpc://', broker='pyamqp://guest@localhost//')
from downloaderApp import download,list
r = download.delay('https://property145.com/media/documents/agent/property_10/tanah-kavling.png', 'property145.png')
r.ready()
Demo: