मैं पिछले हफ्ते इस सटीक समस्या में भाग गया, और हालांकि मुझे कुछ अच्छे समाधान मिले, मैंने एक बहुत ही सरल और स्वच्छ अजगर पैकेज बनाने का फैसला किया और इसे 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