class_docstr: An earlier version of this code (#626) was originally developed as part of the following work:
  
  Rabault, J., Kuhnle, A (2019). Accelerating Deep Reinforcement Leaning strategies of Flow
  Control through a multi-environment approach. Physics of Fluids.
code: def proxy_send(cls, connection, function, kwargs):
      str_function = function.encode()
      num_bytes = len(str_function)
      str_num_bytes = "{:08d}".format(num_bytes).encode()
      bytes_sent = connection.send(str_num_bytes + str_function)
      if bytes_sent != num_bytes + 8:
          raise TensorforceError.unexpected()
  
      str_kwargs = msgpack.packb(o=kwargs)
      num_bytes = len(str_kwargs)
      str_num_bytes = "{:08d}".format(num_bytes).encode()
      bytes_sent = connection.send(str_num_bytes + str_kwargs)
      if bytes_sent != num_bytes + 8:
          raise TensorforceError.unexpected()
  
file_path: tensorforce/tensorforce/environments/socket_environment.py
imports: from socket import SHUT_RDWR, socket
  import time
  import msgpack
  import msgpack_numpy
  from tensorforce import TensorforceError
  from tensorforce.environments import RemoteEnvironment
label_desc: Use image node_id 2 for calling the SocketEnvironment obj's underlying member method code with example usage: obj.proxy_send(cls, connection, function, kwargs) without return types