I'm stuck on the same thing. One thing I did notice though, it looks like the requestUserToken call completes just fine (validated by adding a print line after userToken=token) if you remove/comment the lock.wait() line (granted this won't fix the problem because getUserToken would return a blank string since it doesn't wait for the call to complete).
Based on this, my hunch is that the lock is preventing the requestUserToken call from executing or completing. This is where I'm stuck at the moment - how to either get requestUserToken to work with the lock or find an alternative to the lock pattern.