code: def test_progress_kill(self):
      def preeval_cb(image, progress):
          pass
  
      def eval_cb(image, progress):
          image.set_kill(True)
  
      def posteval_cb(image, progress):
          pass
  
      # has to be very tall to ensure the kill has enough threadpool loops
      # to work
      image = pyvips.Image.black(1, 1000000)
      image.set_progress(True)
      image.signal_connect("preeval", preeval_cb)
      image.signal_connect("eval", eval_cb)
      image.signal_connect("posteval", posteval_cb)
  
      with pytest.raises(Exception):
          image.copy_memory()
  
imports: import pytest
  import pyvips
label_desc: Use image node_id 3 for calling the TestProgress obj's underlying member method code with example usage: obj.test_progress_kill() without return types