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 2015年08月20日 07:21 by filmor, last changed 2022年04月11日 14:58 by admin.
| Messages (4) | |||
|---|---|---|---|
| msg248878 - (view) | Author: Benedikt Reinartz (filmor) * | Date: 2015年08月20日 07:21 | |
When raising an exception that is unpicklable in a worker process. This used to be the case for all exceptions that have a non-trivial constructor but this was fixed by http://bugs.python.org/issue1692335. I now have the concrete problem with cx_Oracle in which the error type cx_Oracle._Error doesn't define tp_new which results in a UnpicklingError: NEWOBJ class argument has NULL tp_new I have already reported this fact at https://bitbucket.org/anthony_tuininga/cx_oracle/issues/23. However, I think that the worker thread should either be able to recover from this (which should be quite easy) or, at the very least, fail cleanly. Currently, when this condition is triggered the worker processes are not killed alongside the parent. There is an existing report and a patch in the backports project: https://github.com/agronholm/pythonfutures/issues/30#issuecomment-132576545 |
|||
| msg248879 - (view) | Author: Benedikt Reinartz (filmor) * | Date: 2015年08月20日 07:34 | |
Actually I think that this may consist of multiple issues: 1. http://bugs.python.org/issue8323 (closed as wont-fix): multiprocessing.Queue should throw a sensible error if a Queue element can't be unpickled, however the user managed to create that 2. The worker process should prevent unpicklable ResultItems to be put on the Queue 3. The parent thread in ProcessPoolExecutor should handle the exceptions by setting its broken flag and at least trying to cleanly shut down |
|||
| msg249531 - (view) | Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) | Date: 2015年09月02日 09:58 | |
The patch for issue22995 disallows default pickling objects with tp_new == NULL. |
|||
| msg250385 - (view) | Author: Benedikt Reinartz (filmor) * | Date: 2015年09月10日 16:03 | |
That would touch 2, but as this is happening in the exception handling already that would need to be catched and handled by itself. However, one could then do without a "pickle -> unpickle" dance. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:58:19 | admin | set | github: 69088 |
| 2017年08月30日 23:21:01 | pitrou | set | pull_requests: - pull_request3277 |
| 2017年08月29日 15:40:55 | gwk | set | pull_requests: + pull_request3277 |
| 2015年09月10日 16:03:40 | filmor | set | messages: + msg250385 |
| 2015年09月02日 09:58:03 | serhiy.storchaka | set | nosy:
+ alexandre.vassalotti, serhiy.storchaka, pitrou messages: + msg249531 |
| 2015年09月02日 08:57:42 | filmor | set | versions: + Python 2.7, Python 3.2, Python 3.4, Python 3.5, Python 3.6 |
| 2015年08月21日 01:10:09 | alex.gronholm | set | nosy:
+ alex.gronholm |
| 2015年08月20日 07:34:55 | filmor | set | messages:
+ msg248879 title: Raising an exception that is unable to be unpickled causes hang in ProcessPoolExecutor -> Raising an exception that cannot be unpickled causes hang in ProcessPoolExecutor |
| 2015年08月20日 07:21:50 | filmor | create | |