class_docstr: The Runner manages two threads (per instance) and all of the
  workers (per class, i.e., singletons).
  
  The two threads run interface() and jobserver(), below.
  
  interface() is responsible grouping jobs for dispatch, tracking job
  progress, integrating measurements returned from workers.
  
  jobserver() is a lightweight thread that serves jobs and receives their
  requests, acting as a switchboard between workers, interface(), and
  whatever event_listener is present (via post_event()).
  
  workers are stored in AnalysisRunner.workers[], and are separate processes.
  They are expected to exit if their stdin() closes, e.g., if the parent
  process goes away.
  
  interface() and jobserver() communicate via Queues and using condition
  variables to get each other's attention.  zmqrequest is used to communicate
  between jobserver() and workers[].
class_docstr_tok: ["The","Runner","manages","two","threads","(","per","instance",")","and","all","of","the","workers","(","per","class",",","i.e.",",","singletons",")",".","The","two","threads","run","interface","(",")","and","jobserver","(",")",",","below",".","interface","(",")","is","responsible","grouping","jobs","for","dispatch",",","tracking","job","progress",",","integrating","measurements","returned","from","workers",".","jobserver","(",")","is","a","lightweight","thread","that","serves","jobs","and","receives","their","requests",",","acting","as","a","switchboard","between","workers",",","interface","(",")",",","and","whatever","event_listener","is","present","(","via","post_event","(",")",")",".","workers","are","stored","in","AnalysisRunner.workers","[","]",",","and","are","separate","processes",".","They","are","expected","to","exit","if","their","stdin","(",")","closes",",","e.g.",",","if","the","parent","process","goes","away",".","interface","(",")","and","jobserver","(",")","communicate","via","Queues","and","using","condition","variables","to","get","each","other","'s","attention",".","zmqrequest","is","used","to","communicate","between","jobserver","(",")","and","workers","[","]","."]
docstr: resume a paused analysis run
code: def resume(self):
      """resume a paused analysis run"""
      self.paused = False
      self.notify_threads()
  
imports: import collections
  import io
  import logging
  import os
  import queue
  import subprocess
  import sys
  import tempfile
  import threading
  import re
  import numpy
  import psutil
  from .event import Finished
  from .event import Paused
  from .event import Progress
  from .event import Resumed
  from .event import Started
  from .None import reply
  from .None import request
  from ..image import ImageSetList
  from ..measurement import Measurements
  from ..utilities.measurement import load_measurements_from_buffer
  from ..pipeline import dump
  from ..preferences import get_plugin_directory
  from ..preferences import get_conserve_memory
  from ..preferences import get_temporary_directory
  from ..preferences import get_always_continue
  from ..preferences import preferences_as_dict
  from ..utilities.analysis import close_all_on_exec, start_daemon_thread
  from ..utilities.analysis import find_analysis_worker_source
  from ..utilities.analysis import find_python
  from ..utilities.analysis import find_worker_env
  from ..utilities.zmq import start_boundary, Boundary
  from ..utilities.zmq.communicable.reply import Reply
  from ..workspace import Workspace
label_desc: Use image node_id 7 for calling the Runner obj's underlying member method code with example usage: obj.resume() without return types