parameters: (self, key, new_mi, noblock=False)
return_statement: return True
docstring: Update shared model in the server, wait until all clients receive.
  
          Args:
              key(str): the key in ``models`` to update
              new_mi(`ModelInterface`): new model interface to update
              noblock(bool): indicates if updating models block other threads. Default is blocking.
docstring_summary: Update shared model in the server, wait until all clients receive.
docstring_tokens: Update shared model in the server wait until all clients receive .
function: def server_update_model(self, key, new_mi, noblock=False):
          ''' Update shared model in the server, wait until all clients receive.
  
          Args:
              key(str): the key in ``models`` to update
              new_mi(`ModelInterface`): new model interface to update
              noblock(bool): indicates if updating models block other threads. Default is blocking.
          '''
          # if recv is not done, skip it.
          if noblock:
              try:
                  self.recv_done.wait_noblock()
              except:
                  # The recv is not done yet. Cannot send.
                  return False
          else:
              self.recv_done.wait()
  
          self._server_shared_mi.update_model(key, new_mi)
  
          # Then wait until other people have received.
          self.send_done.notify()
          return True
function_tokens: def server_update_model ( self , key , new_mi , noblock = False ) : # if recv is not done, skip it. if noblock : try : self . recv_done . wait_noblock ( ) except : # The recv is not done yet. Cannot send. return False else : self . recv_done . wait ( ) self . _server_shared_mi . update_model ( key , new_mi ) # Then wait until other people have received. self . send_done . notify ( ) return True