waiting futures using 'yield from', context manager protocol for locks