Rust कार्य अनुसूचक: पुस्तकालयों का अवलोकन और कोड उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Rust कार्य अनुसूचक: डेवलपर्स के लिए पूर्ण गाइड



कार्य अनुसूचक आधुनिक विकास का एक अनिवार्य हिस्सा हैं। वे नियमित संचालन को स्वचालित करने की अनुमति देते हैं: कैश की आवधिक सफाई, सूचनाएं भेजना, डेटा सिंक्रनाइज़ेशन और बहुत कुछ। Rust पारिस्थितिकी तंत्र में कार्य अनुसूचकों को लागू करने के लिए कई शक्तिशाली पुस्तकालय मौजूद हैं। इस लेख में हम तीन मुख्य दृष्टिकोणों पर चर्चा करेंगे: cron, tokio-cron-scheduler और job_scheduler।



1. cron पुस्तकालय के साथ बुनियादी अनुसूचक



cron पुस्तकालय cron-अभिव्यक्तियों को पार्स करने और अगले रन के समय की गणना करने के लिए न्यूनतम कार्यक्षमता प्रदान करता है। इसमें अंतर्निहित निष्पादन लूप नहीं है, इसलिए इसे अक्सर tokio या std::thread के साथ जोड़ा जाता है।



स्थापना:

[dependencies]cron = "0.12"chrono = "0.4"tokio = { version = "1", features = ["full"] }


सरल अनुसूचक का उदाहरण:

use cron::Schedule;use chrono::Utc;use std::str::FromStr;use std::thread;use std::time::Duration;

fn main() { // हर मिनट let expression = "0 * * * * *"; let schedule = Schedule::from_str(expression).unwrap();

loop { let now = Utc::now(); if let Some(next) = schedule.upcoming(Utc).next() { let duration = next - now; if duration.num_seconds() > 0 { thread::sleep(Duration::from_secs(duration.num_seconds() as u64)); } println!("[{}] कार्य पूर्ण हुआ!", Utc::now()); } }}


यह दृष्टिकोण पूर्ण नियंत्रण देता है, लेकिन मैन्युअल लूप प्रबंधन की आवश्यकता होती है। सरल परिदृश्यों के लिए उपयुक्त है।



2. अतुल्यकालिक अनुसूचक tokio-cron-scheduler



tokio पर आधारित आधुनिक अतुल्यकालिक अनुप्रयोगों के लिए, tokio-cron-scheduler पुस्तकालय आदर्श है। यह जटिल cron-अनुसूचियों, पहचानकर्ताओं वाले कार्यों और त्रुटि हैंडलर के समर्थन के साथ एक तैयार अनुसूचक प्रदान करता है।



स्थापना:

[dependencies]tokio-cron-scheduler = "0.10"tokio = { version = "1", features = ["full"] }


दो कार्यों के साथ उदाहरण:

use tokio_cron_scheduler::{Job, JobScheduler};use std::sync::Arc;

#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let sched = JobScheduler::new().await?;

// कार्य 1: हर 5 सेकंड let job1 = Job::new_async("*/5 * * * * *", |_uuid, _lock| { Box::pin(async move { println!("[Job1] {:?} पर निष्पादित", std::time::SystemTime::now()); }) })?;

// कार्य 2: हर मिनट let job2 = Job::new_async("0 * * * * *", |_uuid, _lock| { Box::pin(async move { println!("[Job2] मिनट कार्य"); }) })?;

sched.add(job1).await?; sched.add(job2).await?; sched.start().await?;

// एप्लिकेशन को चालू रखें tokio::signal::ctrl_c().await?; println!("अनुसूचक रोक दिया गया"); Ok(())}


लाभ: स्वचालित समय प्रबंधन, कार्यों को हटाने/रोकने का समर्थन, बिना अवरोध के अतुल्यकालिक निष्पादन।



3. सरल अनुसूचक job_scheduler



job_scheduler पुस्तकालय अधिकतम सरलता पर केंद्रित है। इसे अतुल्यकालिक रनटाइम की आवश्यकता नहीं है और यह कंसोल उपयोगिताओं या मौजूदा सिंक्रोनस प्रोजेक्ट्स में एम्बेड करने के लिए उपयुक्त है।



स्थापना:

[dependencies]job_scheduler = "1.2"chrono = "0.4"


उदाहरण:

use job_scheduler::{Job, JobScheduler};use std::time::Duration;

fn main() { let mut sched = JobScheduler::new();

sched.add(Job::new("1/10 * * * * *".parse().unwrap(), || { println!("हर 10 सेकंड में कार्य निष्पादन");

अनुशंसाएँ