def __init__(self, engine, dao, max_file_processors=5): ''' Constructor ''' super(QueueManager, self).__init__() self._dao = dao self._engine = engine self._local_folder_queue = Queue() self._local_file_queue = Queue() self._remote_file_queue = Queue() self._remote_folder_queue = Queue() self._connected = local() self._local_folder_enable = True self._local_file_enable = True self._remote_folder_enable = True self._remote_file_enable = True self._local_folder_thread = None self._local_file_thread = None self._remote_folder_thread = None self._remote_file_thread = None self._error_threshold = ERROR_THRESHOLD self._error_interval = 60 self.set_max_processors(max_file_processors) self._threads_pool = list() self._processors_pool = list() self._get_file_lock = Lock() # Should not operate on thread while we are inspecting them ''' This error required to add a lock for inspecting threads, as the below Traceback shows the processor thread was ended while the method was running Traceback (most recent call last): File "/Users/hudson/tmp/workspace/FT-nuxeo-drive-master-osx/nuxeo-drive-client/nxdrive/engine/watcher/local_watcher.py", line 845, in handle_watchdog_event self.scan_pair(rel_path) File "/Users/hudson/tmp/workspace/FT-nuxeo-drive-master-osx/nuxeo-drive-client/nxdrive/engine/watcher/local_watcher.py", line 271, in scan_pair self._suspend_queue() File "/Users/hudson/tmp/workspace/FT-nuxeo-drive-master-osx/nuxeo-drive-client/nxdrive/engine/watcher/local_watcher.py", line 265, in _suspend_queue for processor in self._engine.get_queue_manager().get_processors_on('/', exact_match=False): File "/Users/hudson/tmp/workspace/FT-nuxeo-drive-master-osx/nuxeo-drive-client/nxdrive/engine/queue_manager.py", line 413, in get_processors_on res.append(self._local_file_thread.worker) AttributeError: 'NoneType' object has no attribute 'worker' ''' self._thread_inspection = Lock() # ERROR HANDLING self._error_lock = Lock() self._on_error_queue = BlacklistQueue(delay=DEFAULT_DELAY) self._error_timer = QTimer() # TODO newErrorGiveUp signal is not connected self._error_timer.timeout.connect(self._on_error_timer) self.newError.connect(self._on_new_error) self.queueProcessing.connect(self.launch_processors) # LAST ACTION self._dao.register_queue_manager(self)