eric6/DebugClients/Python/MultiprocessingExtension.py

Fri, 18 Dec 2020 16:48:14 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 18 Dec 2020 16:48:14 +0100
changeset 7895
554fdb07c856
parent 7894
4370a8b30648
child 7901
6ff7ccf0cb50
permissions
-rw-r--r--

Debugger: added support for the -m option to debug a module as a script.

7563
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2020 Detlev Offenbach <detlev@die-offenbachs.de>
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a function to patch multiprocessing.Process to support
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 debugging of the process.
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 """
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import sys
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import traceback
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 _debugClient = None
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 _originalProcess = None
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 _originalBootstrap = None
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 def patchMultiprocessing(module, debugClient):
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 """
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 Function to patch the multiprocessing module.
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 @param module reference to the imported module to be patched
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 @type module
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 @param debugClient reference to the debug client object
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 @type DebugClient
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """ # __IGNORE_WARNING_D234__
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 global _debugClient, _originalProcess, _originalBootstrap
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 _debugClient = debugClient
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
7894
4370a8b30648 Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7893
diff changeset
32 _originalProcess = module.process.BaseProcess
7563
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 _originalBootstrap = _originalProcess._bootstrap
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
7882
617cc27f11af Updated some source docu strings and added TODO markers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7877
diff changeset
35 # TODO: implement a process tracer
617cc27f11af Updated some source docu strings and added TODO markers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7877
diff changeset
36 # i.e. report which processes are started
7563
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 class ProcessWrapper(_originalProcess):
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 Wrapper class for multiprocessing.Process.
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 """
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 def _bootstrap(self, *args, **kwargs):
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 """
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 Wrapper around _bootstrap to start debugger.
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @param args function arguments
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 @type list
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 @param kwargs keyword only arguments
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 @type dict
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 @return exit code of the process
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 @rtype int
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 """
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 if (
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 _debugClient.debugging and
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 _debugClient.multiprocessSupport
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 ):
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 try:
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 (wd, host, port, exceptions, tracePython, redirect,
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 noencoding) = _debugClient.startOptions[:7]
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 _debugClient.startDebugger(
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 sys.argv[0], host=host, port=port,
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 exceptions=exceptions, tracePython=tracePython,
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 redirect=redirect, passive=False,
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 multiprocessSupport=True
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 )
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 except Exception:
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 print("Exception during multiprocessing bootstrap init:")
7646
39e3db2b4936 Merged with default to track recent development.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7563
diff changeset
67 # __IGNORE_WARNING_M801__
7563
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 traceback.print_exc(file=sys.stdout)
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 sys.stdout.flush()
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 raise
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71
7893
29d2c2e5b948 MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7882
diff changeset
72 exitcode = _originalBootstrap(self, *args, **kwargs)
29d2c2e5b948 MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7882
diff changeset
73
29d2c2e5b948 MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7882
diff changeset
74 if (
29d2c2e5b948 MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7882
diff changeset
75 _debugClient.debugging and
29d2c2e5b948 MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7882
diff changeset
76 _debugClient.multiprocessSupport
29d2c2e5b948 MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7882
diff changeset
77 ):
29d2c2e5b948 MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7882
diff changeset
78 _debugClient.progTerminated(exitcode, "process finished")
29d2c2e5b948 MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7882
diff changeset
79
29d2c2e5b948 MultiproocessingExtension: fixed an issue handling the exit of a process.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7882
diff changeset
80 return exitcode
7563
b0d6b63f2843 Implemented multi process debugging support for the 'multiprocessing' module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
7894
4370a8b30648 Changed the minimum supported Python version to 3.6.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7893
diff changeset
82 _originalProcess._bootstrap = ProcessWrapper._bootstrap

eric ide

mercurial