6. Code Snippet

class SearchWorker:
    def process_job(self, jobs):
        job = jobs[0]

        # Track job in running jobs map
        self.add_job_to_running(job)

        # Create and configure search client
        searcher = self.create_searcher(job)

        # Launch search in separate thread
        self.start_search_thread(searcher)

        # Small delay between jobs
        time.sleep(0.5)

    def add_job_to_running(self, job):
        self.running_jobs[job.query_id] = [job.ticket_id]
        self.total_searcher += 1

    def create_searcher(self, job):
        return SearchClient(
            query_id=job.query_id,
            identifier=self.total_searcher,
            query_name=job.query_name,
            controller=self
        )

    def start_search_thread(self, searcher):
        Thread(target=searcher.run).start()