यह एक समाधान है यदि आपकी स्क्रिप्ट अजगर में चलती है (या आप अगले आदेश से पहले चलाने के लिए एक अजगर कमांड बना सकते हैं) - मैं पिछले हफ्ते इस सटीक समस्या में भाग गया था, और हालांकि मुझे कुछ अच्छे समाधान मिले, मैंने एक बहुत बनाने का फैसला किया सरल और साफ अजगर पैकेज और इसे PyPI पर अपलोड किया। आप निश्चित रूप से इसे लॉक __file__
करने के लिए कस्टम संसाधन नाम देने के बारे में सोचने के लिए लॉक नहीं कर सकते थे।
इसके साथ स्थापित करें: pip install quicklock
इसका उपयोग करना बेहद सरल है:
[nate@Nates-MacBook-Pro-3 ~/live] python
Python 2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from quicklock import singleton
>>> # Let's create a lock so that only one instance of a script will run
...
>>> singleton('hello world')
>>>
>>> # Let's try to do that again, this should fail
...
>>> singleton('hello world')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/nate/live/gallery/env/lib/python2.7/site-packages/quicklock/quicklock.py", line 47, in singleton
raise RuntimeError('Resource <{}> is currently locked by <Process {}: "{}">'.format(resource, other_process.pid, other_process.name()))
RuntimeError: Resource <hello world> is currently locked by <Process 24801: "python">
>>>
>>> # But if we quit this process, we release the lock automatically
...
>>> ^D
[nate@Nates-MacBook-Pro-3 ~/live] python
Python 2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from quicklock import singleton
>>> singleton('hello world')
>>>
>>> # No exception was thrown, we own 'hello world'!
नज़र डालें: https://pypi.python.org/pypi/quicklock