Closed
Description
Hi again,
I think that I may have found a possible race condition when counting the memory with psutil of a process using the include_children
option. The problem (I think) is in this piece of code in _get_memory
:
if include_children:
for p in process.get_children(recursive=True):
mem += p.get_memory_info()[0] / _TWO_20
The method get_children
returns a list that is used to iterate over and calculate the total memory. It may happen though that one of the child processes dies or finishes before the sum has finished, resulting on an error like this:
Reading configuration from '/pica/h1/guilc/repos/facs/tests/data/bin/fastq_screen.conf'
Using 1 threads for searches
Adding database phiX
Processing /pica/h1/guilc/repos/facs/tests/data/synthetic_fastq/simngs_phiX_100.fastq
Output file /pica/h1/guilc/repos/facs/tests/data/tmp/simngs_phiX_100_screen.txt already exists - skipping
Processing complete
Process MemTimer-2:
Traceback (most recent call last):
File "/sw/comp/python/2.7_kalkyl/lib/python2.7/multiprocessing/process.py", line 232, in _bootstrap
self.run()
File "/pica/h1/guilc/.virtualenvs/facs/lib/python2.7/site-packages/memory_profiler.py", line 124, in run
include_children=self.include_children)
File "/pica/h1/guilc/.virtualenvs/facs/lib/python2.7/site-packages/memory_profiler.py", line 52, in _get_memory
mem += p.get_memory_info()[0] / _TWO_20
File "/pica/h1/guilc/.virtualenvs/facs/lib/python2.7/site-packages/psutil/__init__.py", line 758, in get_memory_info
return self._platform_impl.get_memory_info()
File "/pica/h1/guilc/.virtualenvs/facs/lib/python2.7/site-packages/psutil/_pslinux.py", line 470, in wrapper
raise NoSuchProcess(self.pid, self._process_name)
NoSuchProcess: process no longer exists (pid=17442)
It happens randomly, and can be solved encapsulating the sum on a try except statement:
if include_children:
for p in process.get_children(recursive=True):
try:
mem += p.get_memory_info()[0] / _TWO_20
except NoSuchProcess:
pass
I'm not sure that this is the best solution though... any comments/ideas? @fabianp @brainstorm
Thanks!
Metadata
Metadata
Assignees
Labels
No labels