[Python-Dev] Obtaining stack-frames from co-routine objects
Yury Selivanov
yselivanov.ml at gmail.com
Tue Jun 2 06:39:33 CEST 2015
More information about the Python-Dev mailing list
Tue Jun 2 06:39:33 CEST 2015
- Previous message (by thread): [Python-Dev] cpython (2.7): Issue #24357: Change host in socket.getaddrinfo example to one that
- Next message (by thread): [Python-Dev] Obtaining stack-frames from co-routine objects
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi Ben, On 2015-05-31 8:35 AM, Ben Leslie wrote: > Hi Yury, > > I'm just starting my exploration into using async/await; all my > 'real-world' scenarios are currently hypothetical. > > One such hypothetical scenario however is that if I have a server > process running, with some set of concurrent connections, each managed > by a co-routine. Each co-routine is of some arbitrary complexity e.g: > some combination of reading files, reading from database, reading from > peripherals. If I notice one of those co-routines appears stuck and > not making progress, I'd very much like to debug that, and preferably > in a way that doesn't necessarily stop the rest of the server (or even > the co-routine that appears stuck). > > The problem with the "if debug: log(...)" approach is that you need > foreknowledge of the fault state occurring; on a busy server you don't > want to just be logging every 'switch()'. I guess you could do > something like "switch_state[outer_coro] = get_current_stack_frames()" > on each switch. To me double book-keeping something that the > interpreter already knows seems somewhat wasteful but maybe it isn't > really too bad. I guess it all depends on how "switching" is organized in your framework of choice. In asyncio, for instance, all the code that knows about coroutines is in tasks.py. `Task` class is responsible for running coroutines, and it's the single place where you would need to put the "if debug: ..." line for debugging "slow" Futures-- the only thing that coroutines can "stuck" with (the other thing is accidentally calling blocking code, but your proposal wouldn't help with that). Yury
- Previous message (by thread): [Python-Dev] cpython (2.7): Issue #24357: Change host in socket.getaddrinfo example to one that
- Next message (by thread): [Python-Dev] Obtaining stack-frames from co-routine objects
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-Dev mailing list