本文整理汇总了Python中_emerge.AsynchronousLock.AsynchronousLock.async_unlock方法的典型用法代码示例。如果您正苦于以下问题:Python AsynchronousLock.async_unlock方法的具体用法?Python AsynchronousLock.async_unlock怎么用?Python AsynchronousLock.async_unlock使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类_emerge.AsynchronousLock.AsynchronousLock
的用法示例。
在下文中一共展示了AsynchronousLock.async_unlock方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _testAsynchronousLock
# 需要导入模块: from _emerge.AsynchronousLock import AsynchronousLock [as 别名]
# 或者: from _emerge.AsynchronousLock.AsynchronousLock import async_unlock [as 别名]
def _testAsynchronousLock(self):
scheduler = global_event_loop()
tempdir = tempfile.mkdtemp()
try:
path = os.path.join(tempdir, 'lock_me')
for force_async, async_unlock in itertools.product(
(True, False), repeat=2):
for force_dummy in (True, False):
async_lock = AsynchronousLock(path=path,
scheduler=scheduler, _force_async=force_async,
_force_thread=True,
_force_dummy=force_dummy)
async_lock.start()
self.assertEqual(async_lock.wait(), os.EX_OK)
self.assertEqual(async_lock.returncode, os.EX_OK)
if async_unlock:
scheduler.run_until_complete(async_lock.async_unlock())
else:
async_lock.unlock()
async_lock = AsynchronousLock(path=path,
scheduler=scheduler, _force_async=force_async,
_force_process=True)
async_lock.start()
self.assertEqual(async_lock.wait(), os.EX_OK)
self.assertEqual(async_lock.returncode, os.EX_OK)
if async_unlock:
scheduler.run_until_complete(async_lock.async_unlock())
else:
async_lock.unlock()
finally:
shutil.rmtree(tempdir)
示例2: EbuildPhase
# 需要导入模块: from _emerge.AsynchronousLock import AsynchronousLock [as 别名]
# 或者: from _emerge.AsynchronousLock.AsynchronousLock import async_unlock [as 别名]
#.........这里部分代码省略.........
def _start_ebuild(self):
if self.phase == "package":
self._start_task(PackagePhase(actionmap=self.actionmap,
background=self.background, fd_pipes=self.fd_pipes,
logfile=self._get_log_path(), scheduler=self.scheduler,
settings=self.settings), self._ebuild_exit)
return
if self.phase == "unpack":
alist = self.settings.configdict["pkg"].get("A", "").split()
_prepare_fake_distdir(self.settings, alist)
_prepare_fake_filesdir(self.settings)
fd_pipes = self.fd_pipes
if fd_pipes is None:
if not self.background and self.phase == 'nofetch':
# All the pkg_nofetch output goes to stderr since
# it's considered to be an error message.
fd_pipes = {1 : sys.__stderr__.fileno()}
ebuild_process = EbuildProcess(actionmap=self.actionmap,
background=self.background, fd_pipes=fd_pipes,
logfile=self._get_log_path(), phase=self.phase,
scheduler=self.scheduler, settings=self.settings)
self._start_task(ebuild_process, self._ebuild_exit)
def _ebuild_exit(self, ebuild_process):
self._assert_current(ebuild_process)
if self._ebuild_lock is None:
self._ebuild_exit_unlocked(ebuild_process)
else:
self._start_task(
AsyncTaskFuture(future=self._ebuild_lock.async_unlock()),
functools.partial(self._ebuild_exit_unlocked, ebuild_process))
def _ebuild_exit_unlocked(self, ebuild_process, unlock_task=None):
if unlock_task is not None:
self._assert_current(unlock_task)
if unlock_task.cancelled:
self._default_final_exit(unlock_task)
return
# Normally, async_unlock should not raise an exception here.
unlock_task.future.result()
fail = False
if ebuild_process.returncode != os.EX_OK:
self.returncode = ebuild_process.returncode
if self.phase == "test" and \
"test-fail-continue" in self.settings.features:
# mark test phase as complete (bug #452030)
try:
open(_unicode_encode(os.path.join(
self.settings["PORTAGE_BUILDDIR"], ".tested"),
encoding=_encodings['fs'], errors='strict'),
'wb').close()
except OSError:
pass
else:
fail = True
if not fail:
self.returncode = None
logfile = self._get_log_path()
示例3: _BinpkgFetcherProcess
# 需要导入模块: from _emerge.AsynchronousLock import AsynchronousLock [as 别名]
# 或者: from _emerge.AsynchronousLock.AsynchronousLock import async_unlock [as 别名]
#.........这里部分代码省略.........
fcmd_vars[k] = v
fetch_env = dict(settings.items())
fetch_args = [portage.util.varexpand(x, mydict=fcmd_vars) \
for x in portage.util.shlex_split(fcmd)]
if self.fd_pipes is None:
self.fd_pipes = {}
fd_pipes = self.fd_pipes
# Redirect all output to stdout since some fetchers like
# wget pollute stderr (if portage detects a problem then it
# can send it's own message to stderr).
fd_pipes.setdefault(0, portage._get_stdin().fileno())
fd_pipes.setdefault(1, sys.__stdout__.fileno())
fd_pipes.setdefault(2, sys.__stdout__.fileno())
self.args = fetch_args
self.env = fetch_env
if settings.selinux_enabled():
self._selinux_type = settings["PORTAGE_FETCH_T"]
SpawnProcess._start(self)
def _pipe(self, fd_pipes):
"""When appropriate, use a pty so that fetcher progress bars,
like wget has, will work properly."""
if self.background or not sys.__stdout__.isatty():
# When the output only goes to a log file,
# there's no point in creating a pty.
return os.pipe()
stdout_pipe = None
if not self.background:
stdout_pipe = fd_pipes.get(1)
got_pty, master_fd, slave_fd = \
_create_pty_or_pipe(copy_term_size=stdout_pipe)
return (master_fd, slave_fd)
def sync_timestamp(self):
# If possible, update the mtime to match the remote package if
# the fetcher didn't already do it automatically.
bintree = self.pkg.root_config.trees["bintree"]
if bintree._remote_has_index:
remote_mtime = bintree._remotepkgs[
bintree.dbapi._instance_key(
self.pkg.cpv)].get("_mtime_")
if remote_mtime is not None:
try:
remote_mtime = long(remote_mtime)
except ValueError:
pass
else:
try:
local_mtime = os.stat(self.pkg_path)[stat.ST_MTIME]
except OSError:
pass
else:
if remote_mtime != local_mtime:
try:
os.utime(self.pkg_path,
(remote_mtime, remote_mtime))
except OSError:
pass
def async_lock(self):
"""
This raises an AlreadyLocked exception if lock() is called
while a lock is already held. In order to avoid this, call
unlock() or check whether the "locked" attribute is True
or False before calling lock().
"""
if self._lock_obj is not None:
raise self.AlreadyLocked((self._lock_obj,))
result = self.scheduler.create_future()
def acquired_lock(async_lock):
if async_lock.wait() == os.EX_OK:
self.locked = True
result.set_result(None)
else:
result.set_exception(AssertionError(
"AsynchronousLock failed with returncode %s"
% (async_lock.returncode,)))
self._lock_obj = AsynchronousLock(path=self.pkg_path,
scheduler=self.scheduler)
self._lock_obj.addExitListener(acquired_lock)
self._lock_obj.start()
return result
class AlreadyLocked(portage.exception.PortageException):
pass
def async_unlock(self):
if self._lock_obj is None:
raise AssertionError('already unlocked')
result = self._lock_obj.async_unlock()
self._lock_obj = None
self.locked = False
return result