本文整理汇总了Python中twisted.python.lockfile.FilesystemLock.lock方法的典型用法代码示例。如果您正苦于以下问题:Python FilesystemLock.lock方法的具体用法?Python FilesystemLock.lock怎么用?Python FilesystemLock.lock使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类twisted.python.lockfile.FilesystemLock
的用法示例。
在下文中一共展示了FilesystemLock.lock方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_runUsedDirectory
# 需要导入模块: from twisted.python.lockfile import FilesystemLock [as 别名]
# 或者: from twisted.python.lockfile.FilesystemLock import lock [as 别名]
def test_runUsedDirectory(self):
"""
L{DistTrialRunner} checks if the test directory is already locked, and
if it is generates a name based on it.
"""
class FakeReactorWithLock(FakeReactor):
def spawnProcess(oself, worker, *args, **kwargs):
self.assertEqual(os.path.abspath(worker._logDirectory),
os.path.abspath(
os.path.join(workingDirectory + "-1",
str(oself.spawnCount))))
localLock = FilesystemLock(workingDirectory + "-1.lock")
self.assertFalse(localLock.lock())
oself.spawnCount += 1
worker.makeConnection(FakeTransport())
worker._ampProtocol.run = lambda *args: succeed(None)
newDirectory = self.mktemp()
os.mkdir(newDirectory)
workingDirectory = os.path.join(newDirectory, "_trial_temp")
lock = FilesystemLock(workingDirectory + ".lock")
lock.lock()
self.addCleanup(lock.unlock)
self.runner._workingDirectory = workingDirectory
fakeReactor = FakeReactorWithLock()
suite = TrialSuite()
for i in range(10):
suite.addTest(TestCase())
self.runner.run(suite, fakeReactor)
示例2: copyPackage
# 需要导入模块: from twisted.python.lockfile import FilesystemLock [as 别名]
# 或者: from twisted.python.lockfile.FilesystemLock import lock [as 别名]
def copyPackage(title):
"""
Copy package directory to db path using a file lock to avoid potential
concurrency race conditions.
@param title: string to use in log entry
@type title: C{str}
"""
dbpath = FilePath(TimezoneCache.getDBPath())
pkgpath = TimezoneCache.FilteredFilePath(TimezoneCache._getPackageDBPath())
lockfile = FilesystemLock(dbpath.path + ".lock")
result = lockfile.lock()
try:
if result and not dbpath.exists():
log.info(
"{title} timezones from {pkg} to {to}",
title=title,
pkg=pkgpath.path,
to=dbpath.path
)
# Copy over the entire package
pkgpath.copyFilteredDirectoryTo(dbpath)
finally:
if result:
lockfile.unlock()
示例3: check
# 需要导入模块: from twisted.python.lockfile import FilesystemLock [as 别名]
# 或者: from twisted.python.lockfile.FilesystemLock import lock [as 别名]
def check():
localLock = FilesystemLock(workingDirectory + ".lock")
self.assertTrue(localLock.lock())
self.assertEqual(1, fakeReactor.stopCount)
# We don't wait for the process deferreds here, so nothing is
# returned by the function before shutdown
self.assertIdentical(None, functions[0]())
示例4: do_restore
# 需要导入模块: from twisted.python.lockfile import FilesystemLock [as 别名]
# 或者: from twisted.python.lockfile.FilesystemLock import lock [as 别名]
def do_restore():
lock = FilesystemLock("/var/run/jolicloud_restore_utility.lock")
if lock.lock():
if os.environ.get('DISPLAY', False):
JolicloudRestoreUtilityGtk()
else:
JolicloudRestoreUtilityText()
reactor.run()
lock.unlock()
示例5: spawnProcess
# 需要导入模块: from twisted.python.lockfile import FilesystemLock [as 别名]
# 或者: from twisted.python.lockfile.FilesystemLock import lock [as 别名]
def spawnProcess(oself, worker, *args, **kwargs):
self.assertEqual(os.path.abspath(worker._logDirectory),
os.path.abspath(
os.path.join(workingDirectory + "-1",
str(oself.spawnCount))))
localLock = FilesystemLock(workingDirectory + "-1.lock")
self.assertFalse(localLock.lock())
oself.spawnCount += 1
worker.makeConnection(FakeTransport())
worker._ampProtocol.run = lambda *args: succeed(None)
示例6: _unusedTestDirectory
# 需要导入模块: from twisted.python.lockfile import FilesystemLock [as 别名]
# 或者: from twisted.python.lockfile.FilesystemLock import lock [as 别名]
def _unusedTestDirectory(base):
"""
Find an unused directory named similarly to C{base}.
Once a directory is found, it will be locked and a marker dropped into it to
identify it as a trial temporary directory.
@param base: A template path for the discovery process. If this path
exactly cannot be used, a path which varies only in a suffix of the
basename will be used instead.
@type base: L{FilePath}
@return: A two-tuple. The first element is a L{FilePath} representing the
directory which was found and created. The second element is a locked
L{FilesystemLock<twisted.python.lockfile.FilesystemLock>}. Another
call to C{_unusedTestDirectory} will not be able to reused the the
same name until the lock is released, either explicitly or by this
process exiting.
"""
from twisted.python.lockfile import FilesystemLock
counter = 0
while True:
if counter:
testdir = base.sibling('%s-%d' % (base.basename(), counter))
else:
testdir = base
testDirLock = FilesystemLock(testdir.path + '.lock')
if testDirLock.lock():
# It is not in use
if testdir.exists():
# It exists though - delete it
_removeSafely(testdir)
# Create it anew and mark it as ours so the next _removeSafely on it
# succeeds.
testdir.makedirs()
testdir.child('_trial_marker').setContent('')
return testdir, testDirLock
else:
# It is in use
if base.basename() == '_trial_temp':
counter += 1
else:
raise _WorkingDirectoryBusy()
示例7: OptionParser
# 需要导入模块: from twisted.python.lockfile import FilesystemLock [as 别名]
# 或者: from twisted.python.lockfile.FilesystemLock import lock [as 别名]
log.error('Sendchange failed for %s: ' % release, exc_info=True)
if rc != 0:
sys.exit(rc)
if __name__ == '__main__':
parser = OptionParser(__doc__)
parser.add_option('-l', '--lockfile', dest='lockfile',
default=path.join(os.getcwd(), ".release-runner.lock"))
parser.add_option('-c', '--config', dest='config',
help='Configuration file')
options = parser.parse_args()[0]
if not options.config:
parser.error('Need to pass a config')
lockfile = options.lockfile
log.debug("Using lock file %s", lockfile)
lock = FilesystemLock(lockfile)
if not lock.lock():
raise Exception("Cannot acquire lock: %s" % lockfile)
log.debug("Lock acquired: %s", lockfile)
if not lock.clean:
log.warning("Previous run did not properly exit")
try:
main(options)
finally:
log.debug("Releasing lock: %s", lockfile)
lock.unlock()
示例8: FilesystemLock
# 需要导入模块: from twisted.python.lockfile import FilesystemLock [as 别名]
# 或者: from twisted.python.lockfile.FilesystemLock import lock [as 别名]
tempdir = path = tempfile.mkdtemp()
_home = os.environ.get('HOME', '/')
if platform.system() == 'Windows':
novatool_config_home = os.path.join(os.environ['APPDATA'], 'Novatool')
elif platform.system() == 'Linux':
novatool_config_home = os.path.join(os.environ.get('XDG_CONFIG_HOME', os.path.join(_home, '.config')), 'novatool')
elif platform.system() == 'Darwin':
novatool_config_home = os.path.join(_home, 'Library', 'Application Support', 'Novatool')
else:
novatool_config_home = os.path.join(_home, '.novatool')
if not os.path.exists(novatool_config_home):
os.makedirs(novatool_config_home)
ipc_file = os.path.join(novatool_config_home,'ipc')
lock = FilesystemLock(os.path.join(novatool_config_home,"lock"))
if lock.lock():
mainWin = MainWindow(novatool_config_home, tempdir, githash)
reactor.run()
lock.unlock()
QApplication.quit()
else:
if os.path.isfile(ipc_file):
f = open(ipc_file,'r')
ipc_port = int(f.read())
f.close()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', ipc_port))
else:
print lock.name, 'is locked.'
示例9: LockResource
# 需要导入模块: from twisted.python.lockfile import FilesystemLock [as 别名]
# 或者: from twisted.python.lockfile.FilesystemLock import lock [as 别名]
class LockResource(object):
"""
Handle requests for locking documents.
This class uses Twisted's Filesystem lock to manage a lock in the shared
database.
"""
url_pattern = '/%s/lock/{uuid}' % SHARED_DB_NAME
"""
"""
TIMEOUT = 300 # XXX is 5 minutes reasonable?
"""
The timeout after which the lock expires.
"""
# used for lock doc storage
TIMESTAMP_KEY = '_timestamp'
LOCK_TOKEN_KEY = '_token'
FILESYSTEM_LOCK_TRIES = 5
FILESYSTEM_LOCK_SLEEP_SECONDS = 1
def __init__(self, uuid, state, responder):
"""
Initialize the lock resource. Parameters to this constructor are
automatically passed by u1db.
:param uuid: The user unique id.
:type uuid: str
:param state: The backend database state.
:type state: u1db.remote.ServerState
:param responder: The infrastructure to send responses to client.
:type responder: u1db.remote.HTTPResponder
"""
self._shared_db = state.open_database(SHARED_DB_NAME)
self._lock_doc_id = '%s%s' % (SHARED_DB_LOCK_DOC_ID_PREFIX, uuid)
self._lock = FilesystemLock(
os.path.join(
tempfile.gettempdir(),
hashlib.sha512(self._lock_doc_id).hexdigest()))
self._state = state
self._responder = responder
@http_app.http_method(content=str)
def put(self, content=None):
"""
Handle a PUT request to the lock document.
A lock is a document in the shared db with doc_id equal to
'lock-<uuid>' and the timestamp of its creation as content. This
method obtains a threaded-lock and creates a lock document if it does
not exist or if it has expired.
It returns '201 Created' and a pair containing a token to unlock and
the lock timeout, or '403 AlreadyLockedError' and the remaining amount
of seconds the lock will still be valid.
:param content: The content of the PUT request. It is only here
because PUT requests with empty content are considered
invalid requests by u1db.
:type content: str
"""
# obtain filesystem lock
if not self._try_obtain_filesystem_lock():
self._responder.send_response_json(
LockTimedOutError.status, # error: request timeout
error=LockTimedOutError.wire_description)
return
created_lock = False
now = time.time()
token = hashlib.sha256(os.urandom(10)).hexdigest() # for releasing
lock_doc = self._shared_db.get_doc(self._lock_doc_id)
remaining = self._remaining(lock_doc, now)
# if there's no lock, create one
if lock_doc is None:
lock_doc = self._shared_db.create_doc(
{
self.TIMESTAMP_KEY: now,
self.LOCK_TOKEN_KEY: token,
},
doc_id=self._lock_doc_id)
created_lock = True
else:
if remaining == 0:
# lock expired, create new one
lock_doc.content = {
self.TIMESTAMP_KEY: now,
self.LOCK_TOKEN_KEY: token,
}
self._shared_db.put_doc(lock_doc)
created_lock = True
self._try_release_filesystem_lock()
# send response to client
if created_lock is True:
#.........这里部分代码省略.........
示例10: realCheck
# 需要导入模块: from twisted.python.lockfile import FilesystemLock [as 别名]
# 或者: from twisted.python.lockfile.FilesystemLock import lock [as 别名]
def realCheck():
localLock = FilesystemLock(workingDirectory + ".lock")
self.assertTrue(localLock.lock())
# Stop is not called, as it ought to have been called before
self.assertEqual(0, fakeReactor.stopCount)
示例11: getContext
# 需要导入模块: from twisted.python.lockfile import FilesystemLock [as 别名]
# 或者: from twisted.python.lockfile.FilesystemLock import lock [as 别名]
def getContext(self):
self.method = SSL.TLSv1_METHOD
ctx = ssl.ClientContextFactory.getContext(self)
ctx.set_verify(
SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT,
verifyCallback
)
#print dir(ctx)
#raise SystemExit
return ctx
from os import path
if __name__ == '__main__':
lock = FilesystemLock("treestatusbot.lock")
if isLocked("treestatusbot.lock"):
raise SystemExit("There's already a bot running. If this is not the "
"case, please remove treestatusbot.lock manually")
else:
lock.lock()
def unlock():
lock.unlock()
f = GaiaBotFactory()
reactor.connectSSL(SERVER, int(PORT), f, CtxFactory())
print "Connecting to", SERVER, PORT
# run bot
reactor.addSystemEventTrigger('before', 'shutdown', unlock)
reactor.run()
示例12: obtain_lock
# 需要导入模块: from twisted.python.lockfile import FilesystemLock [as 别名]
# 或者: from twisted.python.lockfile.FilesystemLock import lock [as 别名]
def obtain_lock():
scriptname = os.path.basename(__file__)
lockfile = os.path.join(tempfile.gettempdir(), scriptname + '.lock')
lock = FilesystemLock(lockfile)
return lock.lock()