def give_port():
"""
Returns a random port and registers it.
"""
global port_random
context = get_deploy_context()
# default behavior
if context["config"] is None:
return randint(1000, 65000)
if "banned_ports_parsed" not in context["config"]:
banned_ports_result = []
for port_range in context["config"].banned_ports:
banned_ports_result.extend(list(range(port_range["start"], port_range["end"] + 1)))
context["config"]["banned_ports_parsed"] = banned_ports_result
# during real deployment, let's register a port
if port_random is None:
port_random = Random(context["config"].deploy_secret)
# if this instance already has a port, reuse it
if (context["problem"], context["instance"]) in inv_port_map:
return inv_port_map[(context["problem"], context["instance"])]
if len(context["port_map"].items()) + len(context["config"].banned_ports_parsed) == 65536:
raise Exception("All usable ports are taken. Cannot deploy any more instances.")
while True:
port = port_random.randint(0, 65535)
if port not in context["config"].banned_ports_parsed:
owner, instance = context["port_map"].get(port, (None, None))
if owner is None or (owner == context["problem"] and instance == context["instance"]):
context["port_map"][port] = (context["problem"], context["instance"])
return port
评论列表
文章目录