https://codereview.appspot.com/52320045/diff/80001/asyncio/proactor_events.py File asyncio/proactor_events.py (right): https://codereview.appspot.com/52320045/diff/80001/asyncio/proactor_events.py... asyncio/proactor_events.py:71: self._write_fut = self._read_fut = None Shouldn't you set _pending_write = 0 here too? In general I am a little worried about the code that updates _pending_write -- it looks like a future change in logic might all too easily break the invariant by forgetting to update it at some point. I think it would be worth a comment in __init__, moving the two variables (_write_fut and _pending_write) closer together, and doing an audit of all places where either is changed to make sure the other is changed also. https://codereview.appspot.com/52320045/diff/80001/asyncio/proactor_events.py... asyncio/proactor_events.py:256: self._pending_write = 0 I'd move this out of the 'if'. https://codereview.appspot.com/52320045/diff/80001/asyncio/proactor_events.py... asyncio/proactor_events.py:280: # May resume the protocol if the buffer is empty I'm not sure this comment is needed -- what happens on the next tick isn't our concern here, and obviously _loop_writing() can change everything.