This answer may come late, but I hope it will serve someone. Or if someone finds a better way.
I solved using thread identificator. It is not the best way, but it has worked for me. This way you will avoid blocking two processes.
import torch
from torchvision.models.vgg import vgg19
import threading
from collections import defaultdict

class Wrapper(torch.nn.Module):
    def __init__(self, model):
        super(Wrapper, self).__init__()
        self.model = model
        self.target_outputs = defaultdict(lambda: None)

        def forward_hook(_, __, output):
            self.target_outputs[threading.get_native_id()] = output.detach()
        self.model.features[2].register_forward_hook(forward_hook)

    def forward(self,input):
        self.model(input)

        thread_id = threading.get_native_id()
        result = self.target_outputs[thread_id]
        del self.target_outputs[thread_id]

        return result


model = vgg19()
model = model.cuda(4)
wrapper = Wrapper(model)

devices = [4, 5]

inputs = torch.randn(60,3,224,224).fill_(0).cuda(4)
out = torch.nn.parallel.data_parallel(wrapper, inputs, devices)
print("first forward:   ", out)
inputs = torch.randn(60,3,224,224).fill_(1).cuda(4)
out = torch.nn.parallel.data_parallel(wrapper, inputs, devices)
print("second forward: ", out.shape)