Rust में कार्य अनुसूचक: एक विश्वसनीय job scheduler का निर्माण

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

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

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

Rust में कार्य अनुसूचक: सरल टाइमर से लेकर औद्योगिक job scheduler तक

\n\n

कार्य अनुसूचक (job scheduler) किसी भी गंभीर एप्लिकेशन के प्रमुख घटकों में से एक है। Rust पर आप एक ऐसी प्रणाली बना सकते हैं जो मिलीसेकंड की सटीकता से निष्पादित होगी, न्यूनतम मेमोरी की खपत करेगी और वर्षों तक बिना किसी रुकावट के काम करेगी। इस लेख में, हम मानक साधनों और लोकप्रिय क्रेट्स दोनों का उपयोग करके Rust में कार्य अनुसूचक बनाने का तरीका समझेंगे।

\n\n

Rust में अनुसूचक क्यों लिखें?

\n\n

Rust प्रदर्शन और सुरक्षा का एक अनूठा संयोजन प्रदान करता है। Rust में कार्य अनुसूचक:

\n\n
    \n
  • डेटा रेस (data races) की अनुपस्थिति की गारंटी देता है — कंपाइलर बिल्ड चरण में इसकी जाँच करता है।
  • \n
  • बिना कचरा संग्रहक (garbage collector) के काम करता है — कार्यों के निष्पादन में पूर्वानुमानित विलंब।
  • \n
  • अतुल्यकालिक और मल्टीथ्रेडेड दोनों निष्पादन का समर्थन करता है।
  • \n
  • न्यूनतम मेमोरी खपत — हजारों कार्य चलाए जा सकते हैं।
  • \n
\n\n

std::thread::sleep के साथ सबसे सरल अनुसूचक

\n\n

एक बुनियादी उदाहरण से शुरू करते हैं — हर N सेकंड में कार्य का चक्रीय निष्पादन:

\n\n
use std::thread;\nuse std::time::Duration;\n\nfn main() {\n    let interval = Duration::from_secs(5);\n    \n    loop {\n        println!("[{}] कार्य निष्पादित कर रहा हूँ...", chrono::Local::now().format("%H:%M:%S"));\n        // यहाँ आपका कार्य कोड\n        thread::sleep(interval);\n    }\n}
\n\n

यह दृष्टिकोण सरल है, लेकिन अकुशल: वर्तमान थ्रेड ब्लॉक हो जाता है, कई कार्यों को समानांतर में चलाने की कोई संभावना नहीं है।

\n\n

tokio पर अतुल्यकालिक अनुसूचक

\n\n

वास्तविक परियोजनाओं के लिए tokio का उपयोग करें — एक अतुल्यकालिक रनटाइम जो एक थ्रेड में हजारों कार्यों को चलाने की अनुमति देता है।

\n\n
use tokio::time::{interval, Duration};\n\n#[tokio::main]\nasync fn main() {\n    let mut timer = interval(Duration::from_secs(10));\n    \n    println!("अनुसूचक प्रारंभ हुआ। कार्य हर 10 सेकंड में निष्पादित होगा।");\n    \n    loop {\n        timer.tick().await;\n        println!("[{}] कार्य निष्पादित कर रहा हूँ...", chrono::Local::now().format("%H:%M:%S"));\n        // अतुल्यकालिक कार्य: उदाहरण के लिए, API अनुरोध\n        do_work().await;\n    }\n}\n\nasync fn do_work() {\n    // उपयोगी कार्य का अनुकरण\n    tokio::time::sleep(Duration::from_millis(500)).await;\n    println!("कार्य पूर्ण हुआ।");\n}
\n\n

लाभ: थ्रेड को ब्लॉक नहीं करता, सैकड़ों ऐसे अनुसूचक समानांतर में चलाए जा सकते हैं।

\n\n

cron क्रेट के साथ CRON-जैसी अनुसूची

\n\n

यदि जटिल अनुसूचियाँ (जैसे Linux cron में) सेट करने की आवश्यकता है, तो cron क्रेट का उपयोग करें:

\n\n
use cron::Schedule;\nuse chrono::Utc;\nuse std::str::FromStr;\n\nfn main() {\n    // हर मिनट के 30वें सेकंड पर\n    let expression = "30 * * * * *";\n    let schedule = Schedule::from_str(expression).unwrap();\n    \n    println!("अगले 5 प्रारंभ:");\n    for datetime in schedule.upcoming(Utc).take(5) {\n        println!("  {}", datetime);\n    }\n}
\n\n

यहाँ वास्तविक निष्पादन के साथ एक अधिक पूर्ण उदाहरण है:

\n\n
use cron::Schedule;\nuse chrono::{Utc, Local};\nuse std::thread;\nuse std::time::Duration;\nuse std::str::FromStr;\n\nfn main() {\n    // हर 15 सेकंड में\n    let expression = "0/15 * * * * *";\n    let schedule = Schedule::from_str(expression).unwrap();\n    \n    loop {\n        let now = Utc::now();\n        if let Some(next) = schedule.upcoming(Utc).next() {\n            let delay = next - now;\n            let millis = delay.num_milliseconds().max(0) as u64;\n            \n            thread::sleep(Duration::from_millis(millis));\n            \n            println!("[{}] अनुसूचित कार्य!", Local::now().format("%H:%M:%S"));\n            // कार्य का निष्पादन\n        } else {\n            thread::sleep(Duration::from_secs(1));\n        }\n    }\n}
\n\n

मल्टीथ्रेडिंग के साथ औद्योगिक अनुसूचक

\n\n

गंभीर परियोजनाओं के लिए, एक Scheduler संरचना बनाएँ

अनुशंसाएँ