#14323: libGAP messes with Python subprocesses
-----------------------------------+----------------------------------------
Reporter: jdemeyer | Owner: was
Type: defect | Status: positive_review
Priority: blocker | Milestone: sage-5.9
Component: interfaces | Resolution:
Keywords: child processes | Work issues:
Report Upstream: N/A | Reviewers: Jeroen Demeyer
Authors: Volker Braun | Merged in:
Dependencies: | Stopgaps:
-----------------------------------+----------------------------------------
Changes (by jdemeyer):
* status: needs_work => positive_review
* reviewer: => Jeroen Demeyer
Old description:
> I haven't figured out when/why, but this might happen:
> {{{
> sage -t devel/sage/sage/homology/simplicial_complex.py
> **********************************************************************
> File "devel/sage/sage/homology/simplicial_complex.py", line 3134, in
> sage.homology.simplicial_complex.SimplicialComplex.automorphism_group
> Failed example:
> S.automorphism_group().is_isomorphic(SymmetricGroup(4))
> Exception raised:
> Traceback (most recent call last):
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/doctest/forker.py", line 455, in _run
> self.execute(example, compiled, test.globs)
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/doctest/forker.py", line 811, in execute
> exec compiled in globs
> File "<doctest
> sage.homology.simplicial_complex.SimplicialComplex.automorphism_group[1]>",
> line 1, in <module>
> S.automorphism_group().is_isomorphic(SymmetricGroup(Integer(4)))
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/homology/simplicial_complex.py", line 3155, in
> automorphism_group
> [f.tuple() for f in self.facets()]])
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/graphs/generic_graph.py", line 16414, in
> automorphism_group
> output.append(PermutationGroup([perm_group_elt(aa) for aa in a]))
> File "refinement_graphs.pyx", line 941, in
> sage.groups.perm_gps.partn_ref.refinement_graphs.perm_group_elt
> (sage/groups/perm_gps/partn_ref/refinement_graphs.c:32796)
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/groups/perm_gps/permgroup.py", line 653, in __call__
> return self._element_class()(x, self, check=check)
> File "permgroup_element.pyx", line 452, in
> sage.groups.perm_gps.permgroup_element.PermutationGroupElement.__init__
> (sage/groups/perm_gps/permgroup_element.c:4490)
> File "sage_object.pyx", line 474, in
> sage.structure.sage_object.SageObject._gap_
> (sage/structure/sage_object.c:4544)
> File "sage_object.pyx", line 450, in
> sage.structure.sage_object.SageObject._interface_
> (sage/structure/sage_object.c:4144)
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/interface.py", line 199, in __call__
> return cls(self, x, name=name)
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/expect.py", line 1280, in __init__
> self._name = parent._create(value, name=name)
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/interface.py", line 389, in _create
> self.set(name, value)
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 1322, in set
> out = self._eval_line(cmd, allow_use_file=True)
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 730, in _eval_line
> self._start()
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 1170, in _start
> gap_reset_workspace(verbose=False)
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 1496, in gap_reset_workspace
> g = Gap(use_workspace_cache=False, max_workspace_size=None)
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 1084, in __init__
> max_workspace_size = _get_gap_memory_pool_size_MB()
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 292, in
> _get_gap_memory_pool_size_MB
> pool = get_gap_memory_pool_size()
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/interfaces/gap.py", line 268, in
> get_gap_memory_pool_size
> suggested_size = min(suggested_size,
> int(mem.virtual_memory_limit()/10))
> File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7
> /site-packages/sage/misc/memory_info.py", line 131, in
> virtual_memory_limit
> if platform.architecture()[0] == '32bit':
> File
> "/padic/release/merger/sage-5.9.beta0/local/lib/python/platform.py", line
> 1084, in architecture
> output = _syscmd_file(executable, '')
> File
> "/padic/release/merger/sage-5.9.beta0/local/lib/python/platform.py", line
> 1032, in _syscmd_file
> rc = f.close()
> IOError: [Errno 10] No child processes
> **********************************************************************
> }}}
> Looking at a `strace`, this is because libGAP installs a `SIGCHLD` signal
> handler which interferes with Python's multiprocessing.
New description:
I haven't figured out when/why, but this might happen:
{{{
sage -t devel/sage/sage/homology/simplicial_complex.py
**********************************************************************
File "devel/sage/sage/homology/simplicial_complex.py", line 3134, in
sage.homology.simplicial_complex.SimplicialComplex.automorphism_group
Failed example:
S.automorphism_group().is_isomorphic(SymmetricGroup(4))
Exception raised:
Traceback (most recent call last):
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/doctest/forker.py", line 455, in _run
self.execute(example, compiled, test.globs)
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/doctest/forker.py", line 811, in execute
exec compiled in globs
File "<doctest
sage.homology.simplicial_complex.SimplicialComplex.automorphism_group[1]>",
line 1, in <module>
S.automorphism_group().is_isomorphic(SymmetricGroup(Integer(4)))
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/homology/simplicial_complex.py", line 3155, in
automorphism_group
[f.tuple() for f in self.facets()]])
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/graphs/generic_graph.py", line 16414, in automorphism_group
output.append(PermutationGroup([perm_group_elt(aa) for aa in a]))
File "refinement_graphs.pyx", line 941, in
sage.groups.perm_gps.partn_ref.refinement_graphs.perm_group_elt
(sage/groups/perm_gps/partn_ref/refinement_graphs.c:32796)
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/groups/perm_gps/permgroup.py", line 653, in __call__
return self._element_class()(x, self, check=check)
File "permgroup_element.pyx", line 452, in
sage.groups.perm_gps.permgroup_element.PermutationGroupElement.__init__
(sage/groups/perm_gps/permgroup_element.c:4490)
File "sage_object.pyx", line 474, in
sage.structure.sage_object.SageObject._gap_
(sage/structure/sage_object.c:4544)
File "sage_object.pyx", line 450, in
sage.structure.sage_object.SageObject._interface_
(sage/structure/sage_object.c:4144)
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/interfaces/interface.py", line 199, in __call__
return cls(self, x, name=name)
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/interfaces/expect.py", line 1280, in __init__
self._name = parent._create(value, name=name)
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/interfaces/interface.py", line 389, in _create
self.set(name, value)
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/interfaces/gap.py", line 1322, in set
out = self._eval_line(cmd, allow_use_file=True)
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/interfaces/gap.py", line 730, in _eval_line
self._start()
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/interfaces/gap.py", line 1170, in _start
gap_reset_workspace(verbose=False)
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/interfaces/gap.py", line 1496, in gap_reset_workspace
g = Gap(use_workspace_cache=False, max_workspace_size=None)
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/interfaces/gap.py", line 1084, in __init__
max_workspace_size = _get_gap_memory_pool_size_MB()
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/interfaces/gap.py", line 292, in
_get_gap_memory_pool_size_MB
pool = get_gap_memory_pool_size()
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/interfaces/gap.py", line 268, in get_gap_memory_pool_size
suggested_size = min(suggested_size,
int(mem.virtual_memory_limit()/10))
File "/padic/release/merger/sage-5.9.beta0/local/lib/python2.7/site-
packages/sage/misc/memory_info.py", line 131, in virtual_memory_limit
if platform.architecture()[0] == '32bit':
File
"/padic/release/merger/sage-5.9.beta0/local/lib/python/platform.py", line
1084, in architecture
output = _syscmd_file(executable, '')
File
"/padic/release/merger/sage-5.9.beta0/local/lib/python/platform.py", line
1032, in _syscmd_file
rc = f.close()
IOError: [Errno 10] No child processes
**********************************************************************
}}}
Looking at a `strace`, this is because libGAP installs a `SIGCHLD` signal
handler which interferes with Python's multiprocessing.
'''spkg''' (originally on #14014):
[http://www.stp.dias.ie/~vbraun/Sage/spkg/libgap-4.5.7.p2.spkg]
(signal handler fix only, see
https://bitbucket.org/vbraun/libgap/commits/3f4ebd64fc1219858802173cd86b7910040fef36)
--
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/14323#comment:7>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.