Description
`
import logging
import sys
from multiprocessing import Pool
import requests
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s"))
logger = logging.getLogger("router-model.log")
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)
def get_data(url_data):
r = requests.post(url_data[0], json=url_data[1], headers={'Content-Type': 'application/json'})
return r.json()
class RouterModel(object):
"""
Model template. You can load your model parameters in init from a location accessible at runtime
"""
# there may be multiple urls to access
URLS = ['http://device-risk-20-ato-default-a.seldon.svc.cluster.local:9000/api/v0.1/predictions']
def __init__(self):
"""
Add any initialization parameters. These will be passed at runtime from the graph definition parameters defined in your seldondeployment kubernetes resource manifest.
"""
logger.info("Initializing")
self.pool = Pool(3)
def predict(self, X, features_names=None):
data = {"data": {"ndarray": X.tolist(), "names": features_names}}
# data will be split for different urls
resps = self.pool.map(get_data, [(url, data) for url in RouterModel.URLS])
return [r for r in resps]
`
I was trying to use multiprocessing.Pool to make request to several urls in parallel. But it seems that self.pool.map doesn't return.