#11778: p_iter_fork doesn't flush stdout properly
-----------------------------+----------------------------------------------
Reporter: johanbosman | Owner: tbd
Type: defect | Status: new
Priority: major | Milestone: sage-4.7.2
Component: PLEASE CHANGE | Keywords: parallel fork stdout
Work_issues: | Upstream: N/A
Reviewer: | Author:
Merged: | Dependencies:
-----------------------------+----------------------------------------------
The following code
{{{
from sage.parallel.use_fork import p_iter_fork
def f(n):
print "Entering f with n=%s" % n
X = p_iter_fork(1, verbose=True)
iter_result = X(g, [((n,), {})])
result = list(iter_result)[0][1]
print "Leaving f with n=%s" % n
return result # Which is just n
def g(n):
print "Inside g with n=%s" % n
return n
def test():
X = p_iter_fork(2, verbose=True)
inputs = [((n,), {}) for n in range(5)]
iter_result = X(f, inputs)
for n in iter_result:
pass
test()
}}}
gives this output (perhaps in a different order):
{{{
Entering f with n=1
Entering f with n=1
Inside g with n=1
Leaving f with n=1
Entering f with n=0
Entering f with n=0
Inside g with n=0
Leaving f with n=0
Entering f with n=2
Entering f with n=2
Inside g with n=2
Leaving f with n=2
Entering f with n=3
Entering f with n=3
Inside g with n=3
Leaving f with n=3
Entering f with n=4
Entering f with n=4
Inside g with n=4
Leaving f with n=4
}}}
The point is that stdout isn't flushed before the process is forked and
therefore its contents are copied to the child process as well and thus
lives in 2 processes.
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/11778>
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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.