process do not join?

  • Thread starter xeon Mailinglist
  • Start date
X

xeon Mailinglist

I am trying to debug my program that launch processes to run a function to copy data between hosts located really far away from each other. The end of my function are in the orders.py and mergedirs.py.

From this point onwards, in is python code. The problem is that this code hangs in the last instruction "forking()", instead of my program continue.

The call of my function were made with: outputs = parmap(mergeDirs, args). This is my parmap function.

It seems that the function mergeDirs ends, but the process does not join. I checked that the mergeDirs is working properly, because I ran the code without processes, and it works fine.

I don't know what is happening. How can I debug this problem?

def parmap(f, X):
pipe = [Pipe() for x in X]
# 2 - what is happening with the tuples (c,x) and (p, c)?
proc = [Process(target=spawn(f), args=(c, x))
for x, (p, c) in zip(X, pipe)]
#[p.start() for p in proc]
for p in proc:
print("Spawn")
p.start()
#[p.join() for p in proc]
for p in proc:
print("Joining")
p.join()
return [p.recv() for (p, c) in pipe]




Copy data time: 104.863273859
orders.py(99): return cluster
mergedirs.py(48): return (new_included, command, poutput)
spawn.py(7): pipe.close()
process.py(259): exitcode = 0
process.py(261): util._exit_function()
--- modulename: util, funcname: _exit_function
util.py(303): info('process shutting down')
--- modulename: util, funcname: info
util.py(77): if _logger:
util.py(304): debug('running all "atexit" finalizers with priority >= 0')
--- modulename: util, funcname: debug
util.py(73): if _logger:
util.py(305): _run_finalizers(0)
--- modulename: util, funcname: _run_finalizers
util.py(257): if _finalizer_registry is None:
util.py(263): if minpriority is None:
util.py(266): f = lambda p : p[0][0] is not None and p[0][0] >= minpriority
util.py(268): items = [x for x in _finalizer_registry.items() if f(x)]
util.py(269): items.sort(reverse=True)
util.py(271): for key, finalizer in items:
util.py(279): if minpriority is None:
util.py(307): if current_process() is not None:
--- modulename: process, funcname: current_process
process.py(63): return _current_process
util.py(318): for p in active_children():
--- modulename: process, funcname: active_children
process.py(69): _cleanup()
--- modulename: process, funcname: _cleanup
process.py(78): for p in list(_current_process._children):
process.py(70): return list(_current_process._children)
util.py(323): for p in active_children():
--- modulename: process, funcname: active_children
process.py(69): _cleanup()
--- modulename: process, funcname: _cleanup
process.py(78): for p in list(_current_process._children):
process.py(70): return list(_current_process._children)
util.py(327): debug('running the remaining "atexit" finalizers')
--- modulename: util, funcname: debug
util.py(73): if _logger:
util.py(328): _run_finalizers()
--- modulename: util, funcname: _run_finalizers
util.py(257): if _finalizer_registry is None:
util.py(263): if minpriority is None:
util.py(264): f = lambda p : p[0][0] is not None
util.py(268): items = [x for x in _finalizer_registry.items() if f(x)]
util.py(269): items.sort(reverse=True)
util.py(271): for key, finalizer in items:
util.py(279): if minpriority is None:
util.py(280): _finalizer_registry.clear()
process.py(278): util.info('process exiting with exitcode %d' % exitcode)
--- modulename: util, funcname: info
util.py(77): if _logger:
process.py(279): return exitcode
forking.py(127): sys.stdout.flush()
forking.py(128): sys.stderr.flush()
forking.py(129): os._exit(code)
 
X

xeon Mailinglist

This log came when I launched the command:

python -m trace --trace myclass.py


I am trying to debug my program that launch processes to run a function to copy data between hosts located really far away from each other. The end of my function are in the orders.py and mergedirs.py.



From this point onwards, in is python code. The problem is that this code hangs in the last instruction "forking()", instead of my program continue.



The call of my function were made with: outputs = parmap(mergeDirs, args). This is my parmap function.



It seems that the function mergeDirs ends, but the process does not join. I checked that the mergeDirs is working properly, because I ran the code without processes, and it works fine.



I don't know what is happening. How can I debug this problem?



def parmap(f, X):

pipe = [Pipe() for x in X]

# 2 - what is happening with the tuples (c,x) and (p, c)?

proc = [Process(target=spawn(f), args=(c, x))

for x, (p, c) in zip(X, pipe)]

#[p.start() for p in proc]

for p in proc:

print("Spawn")

p.start()

#[p.join() for p in proc]

for p in proc:

print("Joining")

p.join()

return [p.recv() for (p, c) in pipe]









Copy data time: 104.863273859

orders.py(99): return cluster

mergedirs.py(48): return (new_included, command, poutput)

spawn.py(7): pipe.close()

process.py(259): exitcode = 0

process.py(261): util._exit_function()

--- modulename: util, funcname: _exit_function

util.py(303): info('process shutting down')

--- modulename: util, funcname: info

util.py(77): if _logger:

util.py(304): debug('running all "atexit" finalizers with priority >= 0')

--- modulename: util, funcname: debug

util.py(73): if _logger:

util.py(305): _run_finalizers(0)

--- modulename: util, funcname: _run_finalizers

util.py(257): if _finalizer_registry is None:

util.py(263): if minpriority is None:

util.py(266): f = lambda p : p[0][0] is not None and p[0][0] >= minpriority

util.py(268): items = [x for x in _finalizer_registry.items() if f(x)]

util.py(269): items.sort(reverse=True)

util.py(271): for key, finalizer in items:

util.py(279): if minpriority is None:

util.py(307): if current_process() is not None:

--- modulename: process, funcname: current_process

process.py(63): return _current_process

util.py(318): for p in active_children():

--- modulename: process, funcname: active_children

process.py(69): _cleanup()

--- modulename: process, funcname: _cleanup

process.py(78): for p in list(_current_process._children):

process.py(70): return list(_current_process._children)

util.py(323): for p in active_children():

--- modulename: process, funcname: active_children

process.py(69): _cleanup()

--- modulename: process, funcname: _cleanup

process.py(78): for p in list(_current_process._children):

process.py(70): return list(_current_process._children)

util.py(327): debug('running the remaining "atexit" finalizers')

--- modulename: util, funcname: debug

util.py(73): if _logger:

util.py(328): _run_finalizers()

--- modulename: util, funcname: _run_finalizers

util.py(257): if _finalizer_registry is None:

util.py(263): if minpriority is None:

util.py(264): f = lambda p : p[0][0] is not None

util.py(268): items = [x for x in _finalizer_registry.items() if f(x)]

util.py(269): items.sort(reverse=True)

util.py(271): for key, finalizer in items:

util.py(279): if minpriority is None:

util.py(280): _finalizer_registry.clear()

process.py(278): util.info('process exiting with exitcode %d' % exitcode)

--- modulename: util, funcname: info

util.py(77): if _logger:

process.py(279): return exitcode

forking.py(127): sys.stdout.flush()

forking.py(128): sys.stderr.flush()

forking.py(129): os._exit(code)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,073
Latest member
DarinCeden

Latest Threads

Top