class_docstr: Object representing a complex data producer.
class_docstr_tok: ["Object","representing","a","complex","data","producer","."]
code: def run_data_creation(self):
      if self._should_end or self._count >= self._num_iters:
          print("Data source finishing")
          self.finished.emit()
          return
  
      time.sleep(1.0)
      image_data = self._update_image_data(self._count)
      line_data = self._update_line_data(self._count)
      self._count += 1
  
      data_dict = {
          "image": image_data,
          "line": line_data,
      }
      self.new_data.emit(data_dict)
      QtCore.QTimer.singleShot(0, self.run_data_creation)
  
imports: import time
  from math import sin, pi
  import numpy
  from PyQt5 import QtWidgets, QtCore
  from vispy.scene import SceneCanvas, visuals
  from vispy.app import use_app
label_desc: Use image node_id 2 for calling the DataSource obj's underlying member method code with example usage: obj.run_data_creation() without return types