मेरे पास एक नेटवर्क ड्राइव (Z: \) है जो एकाधिक विंडोज कंप्यूटरों द्वारा साझा की जाती है। क्या इस नेटवर्क ड्राइव पर फ़ाइलों को बनाने/हटाने से क्रॉस-मशीन लॉक को कार्यान्वित करना संभव है?फ़ाइलों का उपयोग कर वितरित लॉक को कार्यान्वित करना
उदाहरण के लिए, दो कंप्यूटर, ए और बी, एक ही समय में 123 की आईडी के साथ एक साझा संसाधन को लिखना चाहते हैं।
कंप्यूटरों में से एक, ए कहें, एक खाली फ़ाइल जेड: \ locks \ 123 बनाकर संसाधन को पहले लॉक करता है। जब बी देखता है कि "123" के नाम से लॉक फ़ाइल है, बी जानता है कि संसाधन 123 किसी अन्य व्यक्ति द्वारा उपयोग किया जा रहा है, इसलिए इसे ज़ेड के लिए इंतजार करना होगा: \ locks \ 123 को ए से हटाए जाने से पहले संसाधन।
यह मल्टीथ्रेडिंग में महत्वपूर्ण अनुभाग की तरह है, लेकिन मैं इसे कई मशीनों पर करना चाहता हूं।
मैं पायथन में लागू करने की कोशिश कर रहा हूं।
import os
import time
def lock_it(lock_id):
lock_path = "Z:\\locks\\" + lock_id
while os.path.exists(lock_path):
time.sleep(5) # wait for 5 seconds
# create the lock file
lock_file = open(lock_path, "w")
lock_file.close()
def unlock_it(lock_id):
# delete the lock file
lock_path = "Z:\\locks\\" + lock_id
if os.path.exists(lock_path):
os.remove(lock_path)
यह काम नहीं करेगा एक से अधिक प्रक्रियाओं इंतजार कर स्थिति से बाहर निकलें और एक ही समय में ताला फ़ाइल बनाने के हो सकता है क्योंकि: यहाँ है कि मैं क्या के साथ आया है।
तो फिर, प्रश्न है: क्या साझा स्टोरेज पर क्रॉस-मशीन लॉकिंग तंत्र को कार्यान्वित करना संभव है?
टाइमआउट जोड़ने के बारे में कैसे? यानी, समय के बाद, 60 सेकंड कहें, लॉक स्वचालित रूप से रिलीज़ हो जाता है। यह मानते हुए कि लॉकिंग समय इस टाइमआउट से अधिक नहीं होगा। मैं समय के साथ लॉक टाइम प्राप्त कर सकता हूं। समय() - os.path.getctime ("Z: \ my_lock") यह जांचने के लिए कि क्या लॉक अतिदेय है या नहीं। – eliang