def _onlooker_phase(self):
        '''Well-performing bees (chosen probabilistically based on fitness
        score) have a value merged with a second random bee
        '''

        self.__verify_ready()
        self._logger.log('debug', 'Onlooker bee phase')
        modified = []
        for _ in self._employers:
            chosen_bee = np.random.choice(
                self._employers,
                p=[e.probability for e in self._employers]
            )
            if self._processes <= 1:
                new_values = self._merge_bee(chosen_bee)
                self._move_bee(chosen_bee, new_values)
                self.__update(
                    chosen_bee.score,
                    chosen_bee.values,
                    chosen_bee.error
                )
            else:
                modified.append((
                    chosen_bee,
                    self._pool.apply_async(self._merge_bee, [chosen_bee])
                ))
        for pair in modified:
            self._move_bee(pair[0], pair[1].get())
            self.__update(pair[0].score, pair[0].values, pair[0].error)