This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2011年03月24日 16:09 by pitrou, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Messages (6) | |||
|---|---|---|---|
| msg131995 - (view) | Author: Antoine Pitrou (pitrou) * (Python committer) | Date: 2011年03月24日 16:09 | |
If you do: ./python -c "from concurrent.futures import *; from time import *; t = ProcessPoolExecutor(1); t.submit(sleep, 60)" and then kill the child process, the parent process doesn't notice and waits endlessly for the child to return the results. I'm using concurrent.futures here but I assume the bug (or limitation) is on the multiprocessing side? |
|||
| msg131998 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2011年03月24日 16:16 | |
In the following example, if I kill the child process, the parent is immediatly done:
---
from os import getpid
from time import sleep
from multiprocessing import Process
def f(sec):
print("child %s: wait %s seconds" % (getpid(), sec))
sleep(sec)
if __name__ == '__main__':
print("parent %s: wait child" % (getpid(),))
p = Process(target=f, args=(30,))
p.start()
p.join()
---
|
|||
| msg131999 - (view) | Author: Antoine Pitrou (pitrou) * (Python committer) | Date: 2011年03月24日 16:18 | |
Le jeudi 24 mars 2011 à 16:16 +0000, STINNER Victor a écrit : > STINNER Victor <victor.stinner@haypocalc.com> added the comment: > > In the following example, if I kill the child process, the parent is immediatly done: > --- > from os import getpid > from time import sleep > from multiprocessing import Process concurrent.futures uses a multiprocessing.Queue to get the function results back. You should use a similar setup in your script. |
|||
| msg132004 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2011年03月24日 16:33 | |
In the following example, the parent doesn't react when the child process is killed:
-----
from os import getpid
from time import sleep, time
from multiprocessing import Pool
def f(sec):
print("child %s: wait %s seconds" % (getpid(), sec))
sleep(sec)
if __name__ == '__main__':
print("parent %s: wait child" % (getpid(),))
pool = Pool(processes=1)
result = pool.apply_async(f, [60])
print(result.get(timeout=120))
print("parent: done")
-----
|
|||
| msg132005 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2011年03月24日 16:37 | |
It's possible to stop the parent with a CTRL+c, and so here is the trace of blocking function: $ ./python y.py parent 26706: wait child child 26707: wait 60 seconds ^CProcess PoolWorker-2: Traceback (most recent call last): File "y.py", line 13, in <module> Traceback (most recent call last): File "/home/haypo/prog/HG/cpython/Lib/multiprocessing/process.py", line 263, in _bootstrap print(result.get(timeout=120)) File "/home/haypo/prog/HG/cpython/Lib/multiprocessing/pool.py", line 539, in get self.run() File "/home/haypo/prog/HG/cpython/Lib/multiprocessing/process.py", line 118, in run self._target(*self._args, **self._kwargs) File "/home/haypo/prog/HG/cpython/Lib/multiprocessing/pool.py", line 102, in worker self.wait(timeout) File "/home/haypo/prog/HG/cpython/Lib/multiprocessing/pool.py", line 534, in wait task = get() File "/home/haypo/prog/HG/cpython/Lib/multiprocessing/queues.py", line 378, in get return recv() KeyboardInterrupt self._cond.wait(timeout) File "/home/haypo/prog/HG/cpython/Lib/threading.py", line 241, in wait gotit = waiter.acquire(True, timeout) KeyboardInterrupt [61207 refs] |
|||
| msg132645 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2011年03月31日 10:43 | |
This issue is a duplicate of #9205. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:15 | admin | set | github: 55872 |
| 2011年03月31日 10:43:14 | vstinner | set | status: open -> closed resolution: duplicate messages: + msg132645 |
| 2011年03月24日 16:37:15 | vstinner | set | messages: + msg132005 |
| 2011年03月24日 16:35:18 | vstinner | set | title: concurrent.futures (or multiprocessing?) doesn't detect killed processes -> multiprocessing (and concurrent.futures) doesn't detect killed processes |
| 2011年03月24日 16:33:13 | vstinner | set | messages: + msg132004 |
| 2011年03月24日 16:18:21 | pitrou | set | messages: + msg131999 |
| 2011年03月24日 16:16:54 | vstinner | set | messages: + msg131998 |
| 2011年03月24日 16:09:48 | vstinner | set | nosy:
+ vstinner |
| 2011年03月24日 16:09:12 | pitrou | create | |