def _check_and_create_process(self, hostname):
if hostname not in self._hostname_queues_dict.keys():
# We haven't this hostname before
if self._get_current_processes_nb() < self._max_processes_nb:
# Create a new process and new queue for this hostname
hostname_queue = JoinableQueue()
self._hostname_queues_dict[hostname] = hostname_queue
process = WorkerProcess(hostname_queue, self._task_queue, self._result_queue,
self._available_plugins.get_commands(), self._network_retries,
self._network_timeout)
process.start()
self._processes_dict[hostname] = [process]
else:
# We are already using the maximum number of processes
# Do not create a process and re-use a random existing hostname queue
self._hostname_queues_dict[hostname] = random.choice(self._hostname_queues_dict.values())
self._processes_dict[hostname] = []
else:
# We have seen this hostname before - create a new process if possible
if len(self._processes_dict[hostname]) < self._max_processes_per_hostname_nb \
and self._get_current_processes_nb() < self._max_processes_nb:
# We can create a new process; no need to create a queue as it already exists
process = WorkerProcess(self._hostname_queues_dict[hostname], self._task_queue, self._result_queue,
self._available_plugins.get_commands(), self._network_retries,
self._network_timeout)
process.start()
self._processes_dict[hostname].append(process)
评论列表
文章目录