Python RQ का उपयोग करके, हम कार्यकर्ता प्रक्रियाओं को गतिशील रूप से प्रबंधित करने की कोशिश कर रहे हैं।पाइथन आरक्यू कार्यकर्ताओं को गतिशील रूप से कैसे बंद कर दिया जाए?
from rq import Connection, Worker
queues_to_listen_on = get_queues_to_listen_on()
with Connection(connection = get_worker_connection()):
w = Worker(queues_to_listen_on)
w.work()
हम विशेष रूप से श्रमिकों के बंद में रुचि रखते हैं: हम एक कस्टम निर्मित कार्यकर्ता स्क्रिप्ट है, जो (सरलीकृत रूप में) इस प्रकार है का उपयोग करें। हमारे पास मुख्य चिंता यह है कि एक कार्यकर्ता का एक सुंदर शट डाउन कैसे करें, इस तरह से बंद करने से पहले वर्तमान कार्य को समाप्त करने में सक्षम बनाया जाएगा। request_stop(...)
उपयुक्त Worker
ऑब्जेक्ट पर सिग्नल हैंडलर हमें जो चाहिए, वह ऐसा लगता है, लेकिन टर्मिनल में चल रहे कार्यकर्ता प्रक्रिया पर CTRL+C
दबाकर इसे छोड़ने के लिए कोई रास्ता नहीं है (कम से कम मेरे ज्ञान के लिए)।
- प्रोग्राम
rq
लाइब्रेरी का उपयोग कर,request_stop
को संकेत भेजने के लिए और इस तरह सुंदर शटडाउन को गति प्रदान: वरीयता के क्रम में -मैं इसे देख, वहाँ दो संभावित समाधान (वहाँ निश्चित रूप से अधिक हो सकता है) कर रहे हैं ।
- किसी भी तरह से सही प्रक्रिया के पिड को प्राप्त करें (सुनिश्चित नहीं है कि वर्कहोर प्रक्रिया या कार्यकर्ता श्रोता प्रक्रिया) और किसी अन्य विधि का उपयोग करके, उस प्रक्रिया के लिए उपयुक्त सिग्नल भेजें। हमारे पास कुछ तरीकों से किया जा सकता है, लेकिन इसे शायद अधिक काम की आवश्यकता होगी और उस समस्या के लिए अन्य चर लागू करें जिन्हें मैं छोड़ना पसंद करूंगा (उदाहरण के लिए, रिमोट कमांड या उन पंक्तियों के साथ कुछ चलाने के लिए
Fabric
का उपयोग करना)।
यदि इस समस्या को हल करने का एक बेहतर तरीका है या एक ही विकल्प प्राप्त करने वाला एक अलग विकल्प है, तो मैं आपके सुझावों की सराहना करता हूं।
यदि आपको पीआईडी की आवश्यकता है, तो आप वास्तव में इसे w.pid से प्राप्त कर सकते हैं – Borys