Đây là một giải pháp nếu tập lệnh của bạn chạy bằng python (hoặc bạn có thể tạo lệnh python để chạy trước lệnh tiếp theo) - Tôi đã gặp vấn đề chính xác này vào tuần trước, và mặc dù tôi đã tìm thấy một số giải pháp tốt, tôi đã quyết định thực hiện gói python đơn giản và sạch sẽ và tải nó lên PyPI. Bạn chắc chắn có thể khóa __file__
để không phải suy nghĩ về việc đặt cho nó một tên tài nguyên tùy chỉnh để khóa.
Cài đặt với: pip install quicklock
Sử dụng nó cực kỳ đơn giản:
[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'!
Hãy xem: https://pypi.python.org/pypi/quicklock