code: def hmget_helper(rs, query, num_parts):
      """hmget_helper"""
      buff = [b""] * len(query)
      part_dict = {}
      part_ind_dict = {}
      for ind, q in enumerate(query):
          part = crc16_hash(q) % num_parts
          part = "part-%s" % part
          if part not in part_dict:
              part_dict[part] = []
              part_ind_dict[part] = []
          part_dict[part].append(q)
          part_ind_dict[part].append(ind)
  
      def worker(_key, _value, _buff, _rs, _part_ind_dict):
          """worker"""
          response = _rs.hmget(_key, _value)
          for res, ind in zip(response, _part_ind_dict[_key]):
              buff[ind] = res
  
      def hmget(_part_dict, _rs, _buff, _part_ind_dict):
          """hmget"""
          key_value = list(_part_dict.items())
          np.random.shuffle(key_value)
          for key, value in key_value:
              worker(key, value, _buff, _rs, _part_ind_dict)
  
      hmget(part_dict, rs, buff, part_ind_dict)
      return buff
  
imports: import pgl
  import redis
  from redis import BlockingConnectionPool, StrictRedis
  from redis._compat import b, unicode, bytes, long, basestring
  from rediscluster.nodemanager import NodeManager
  from rediscluster.crc import crc16
  from collections import OrderedDict
  import threading
  import numpy
  import time
  import json
  import pgl.graph
  import pickle
  from pgl.utils.logger import log
  import pgl.graph_kernel
label_desc: Use image node_id 4 for calling a global function with example usage: hmget_helper(rs, query, num_parts) and returns: buff