code: async def _create_transaction(self, msg, *args, **kwargs):
          
          recv_msgs, get_key, _1, _2, _3 = self._msgs_registered[msg.__msgtype__]
          key = get_key(msg)
  
          if key in self._transactions[recv_msgs[0]]:
              # If we already have a request for this particular key, just add it on the list of things to call
              for recv_msg in recv_msgs:
                  self._transactions[recv_msg][key].append((args, kwargs))
          else:
              # If that's not the case, add us in the queue, and send the message
              for recv_msg in recv_msgs:
                  self._transactions[recv_msg][key] = [(args, kwargs)]
              await ZMQUtils.send(self._socket, msg)
docs: Create a transaction with the distant server
          :param msg: message to be sent
          :param args: args to be sent to the coroutines given to `register_transaction`
          :param kwargs: kwargs to be sent to the coroutines given to `register_transaction`