code: def __post_init__(self):
      self.use_threads = self.workflow.execution_settings.use_threads
      self.keepincomplete = (
          self.workflow.execution_settings.keep_incomplete
      )
      cores = self.workflow.resource_settings.cores
  
      # Zero thread jobs do not need a thread, but they occupy additional workers.
      # Hence we need to reserve additional workers for them.
      workers = cores + 5 if cores is not None else 5
      self.workers = workers
      self.pool = concurrent.futures.ThreadPoolExecutor(
          max_workers=self.workers
      )
  
imports: import os
  from pathlib import Path
  import sys
  import time
  import shlex
  import concurrent.futures
  import subprocess
  from functools import partial
  from snakemake.common import async_run
  from snakemake.executors import change_working_directory
  from snakemake.settings import DeploymentMethod
  from snakemake_interface_executor_plugins.executors.base import SubmittedJobInfo
  from snakemake_interface_executor_plugins.executors.real import RealExecutor
  from snakemake_interface_executor_plugins.dag import DAGExecutorInterface
  from snakemake_interface_executor_plugins.workflow import WorkflowExecutorInterface
  from snakemake_interface_executor_plugins.logging import LoggerExecutorInterface
  from snakemake_interface_executor_plugins.jobs import JobExecutorInterface, SingleJobExecutorInterface, GroupJobExecutorInterface
  from snakemake_interface_executor_plugins.settings import ExecMode, CommonSettings
  from snakemake.shell import shell
  from snakemake.logging import logger
  from snakemake.exceptions import print_exception, get_exception_origin
  from snakemake.exceptions import format_error, RuleException, log_verbose_traceback
  from snakemake.exceptions import WorkflowError, SpawnedJobError, CacheMissException
label_desc: Use image node_id 1 for calling the Executor obj's underlying member method code with example usage: obj.__post_init__() without return types