Author: Armin Rigo <[email protected]>
Branch: py3.5
Changeset: r89664:f979a9155582
Date: 2017-01-18 19:36 +0100
http://bitbucket.org/pypy/pypy/changeset/f979a9155582/
Log: posix.{get,set}priority()
diff --git a/pypy/module/posix/__init__.py b/pypy/module/posix/__init__.py
--- a/pypy/module/posix/__init__.py
+++ b/pypy/module/posix/__init__.py
@@ -206,6 +206,13 @@
interpleveldefs['get_blocking'] = 'interp_posix.get_blocking'
interpleveldefs['set_blocking'] = 'interp_posix.set_blocking'
+ if hasattr(rposix, 'getpriority'):
+ interpleveldefs['getpriority'] = 'interp_posix.getpriority'
+ interpleveldefs['setpriority'] = 'interp_posix.setpriority'
+ for _name in ['PRIO_PROCESS', 'PRIO_PGRP', 'PRIO_USER']:
+ assert getattr(rposix, _name) is not None, "missing %r" % (_name,)
+ interpleveldefs[_name] = 'space.wrap(%d)' % getattr(rposix, _name)
+
for _name in ["O_CLOEXEC"]:
if getattr(rposix, _name) is not None:
interpleveldefs[_name] = 'space.wrap(%d)' % getattr(rposix, _name)
diff --git a/pypy/module/posix/interp_posix.py
b/pypy/module/posix/interp_posix.py
--- a/pypy/module/posix/interp_posix.py
+++ b/pypy/module/posix/interp_posix.py
@@ -1900,6 +1900,29 @@
except OSError as e:
raise wrap_oserror(space, e, eintr_retry=False)
+@unwrap_spec(which=int, who=int)
+def getpriority(space, which, who):
+ """ getpriority(which, who) -> int
+
+ Get program scheduling priority.
+ """
+ try:
+ returned_priority = rposix.getpriority(which, who)
+ except OSError as e:
+ raise wrap_oserror(space, e, eintr_retry=False)
+ return space.wrap(returned_priority)
+
+@unwrap_spec(which=int, who=int, priority=int)
+def setpriority(space, which, who, priority):
+ """ setpriority(which, who, priority)
+
+ Set program scheduling priority.
+ """
+ try:
+ rposix.setpriority(which, who, priority)
+ except OSError as e:
+ raise wrap_oserror(space, e, eintr_retry=False)
+
def declare_new_w_star(name):
if name in ('WEXITSTATUS', 'WSTOPSIG', 'WTERMSIG'):
@unwrap_spec(status=c_int)
diff --git a/pypy/module/posix/test/test_posix2.py
b/pypy/module/posix/test/test_posix2.py
--- a/pypy/module/posix/test/test_posix2.py
+++ b/pypy/module/posix/test/test_posix2.py
@@ -853,6 +853,31 @@
assert st.st_size == 10000000000
test_largefile.need_sparse_files = True
+ if hasattr(rposix, 'getpriority'):
+ def test_os_set_get_priority(self):
+ posix, os = self.posix, self.os
+ childpid = os.fork()
+ if childpid == 0:
+ # in the child (avoids changing the priority of the parent
+ # process)
+ orig_priority = posix.getpriority(posix.PRIO_PROCESS,
+ os.getpid())
+ orig_grp_priority = posix.getpriority(posix.PRIO_PGRP,
+ os.getpgrp())
+ posix.setpriority(posix.PRIO_PROCESS, os.getpid(),
+ orig_priority + 1)
+ new_priority = posix.getpriority(posix.PRIO_PROCESS,
+ os.getpid())
+ assert new_priority == orig_priority + 1
+ assert posix.getpriority(posix.PRIO_PGRP, os.getpgrp()) == (
+ orig_grp_priority)
+ os._exit(0) # ok
+ #
+ pid1, status1 = os.waitpid(childpid, 0)
+ assert pid1 == childpid
+ assert os.WIFEXITED(status1)
+ assert os.WEXITSTATUS(status1) == 0 # else, test failure
+
def test_write_buffer(self):
os = self.posix
fd = os.open(self.path2 + 'test_write_buffer',
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit