Watchdog: WinError 58 membuat pengawas gagal di acara mendatang

Dibuat pada 14 Sep 2015  ·  4Komentar  ·  Sumber: gorakhargosh/watchdog

Halo semua,

Saat memantau folder di dalam QNAP, saya bisa mendapatkan acara untuk file yang baru dibuat. Namun, jika file baru adalah direktori, pengawas lumpuh karena kesalahan sistem.

Saya menduga itu karena file masih disalin, tetapi itu seharusnya tidak menjadi alasan untuk membuat crash pendengar.

Aplikasi berjalan di Windows 8.1 Pro.
Versi firmware QNAP: 3.7.2 Build 20120719
Jejak Tumpukan:

Exception in thread Thread-3:
Traceback (most recent call last):
  File "C:\Python34\lib\threading.py", line 920, in _bootstrap_inner
    self.run()
  File "C:\Python34\lib\site-packages\watchdog-0.8.3-py3.4.egg\watchdog\observers\api.py", line 146, in run
    self.queue_events(self.timeout)
  File "C:\Python34\lib\site-packages\watchdog-0.8.3-py3.4.egg\watchdog\observers\read_directory_changes.py", line 77, in queue_events
    winapi_events = read_events(self._handle, self.watch.is_recursive)
  File "C:\Python34\lib\site-packages\watchdog-0.8.3-py3.4.egg\watchdog\observers\winapi.py", line 347, in read_events
    buf, nbytes = read_directory_changes(handle, recursive)
  File "C:\Python34\lib\site-packages\watchdog-0.8.3-py3.4.egg\watchdog\observers\winapi.py", line 307, in read_directory_changes
    raise e
  File "C:\Python34\lib\site-packages\watchdog-0.8.3-py3.4.egg\watchdog\observers\winapi.py", line 303, in read_directory_changes
    ctypes.byref(nbytes), None, None)
  File "C:\Python34\lib\site-packages\watchdog-0.8.3-py3.4.egg\watchdog\observers\winapi.py", line 108, in _errcheck_bool
    raise ctypes.WinError()
OSError: [WinError 58] The specified server cannot perform the requested operation.

Komentar yang paling membantu

Saya juga sekarang mencari solusi untuk menunda/mencoba lagi utas dirwatcher di:
OSError: [WinError 64] Nama jaringan yang ditentukan tidak lagi tersedia

Semua 4 komentar

Masalah yang sama di sekitar sini, dengan WinError 64 dan pesan: Nama jaringan yang ditentukan tidak lagi tersedia. Ini terjadi ketika folder disajikan dari server file yang menjadi tidak tersedia (berbagi SMB).

Bagaimana kita bisa menangkap kesalahan semacam ini, untuk mencoba lagi melampirkan pengamat nanti?

Saya juga sekarang mencari solusi untuk menunda/mencoba lagi utas dirwatcher di:
OSError: [WinError 64] Nama jaringan yang ditentukan tidak lagi tersedia

Saya memiliki masalah yang sama ketika saya mendapatkan pesan WinError 64 saat memantau berbagi file jarak jauh. Saya akhirnya membuat pembungkus kecil di sekitar kelas watchdog.utils.BaseThread yang memungkinkan saya menangkap kesalahan dan memulihkannya. Saya kemudian monkeypatch kelas BaseThread asli dengan pembungkus saya sebelum membuat Pengamat. Dalam kasus khusus saya, saya menangkap pengecualian apa pun yang dapat terjadi dalam metode run dan menambahkannya ke antrian untuk dikonsumsi dari utas yang berbeda. Ini adalah solusi peretasan, tetapi tidak banyak opsi tanpa perubahan kode sumber.

import logging
import threading

import watchdog.utils

logger = logging.getLogger(__name__)


class BaseThreadWrapper(watchdog.utils.BaseThread):
    """
    Wrapper around watchdog BaseThread class.

    """
    queue = None

    def __init__(self):
        super(BaseThreadWrapper, self).__init__()
        self._original_run = self.run
        self.run = self.run_wrapper

    def run_wrapper(self):
        try:
            self._original_run()
        except Exception as e:
            logger.exception('%s thread exited with error',
                             threading.current_thread().name)
            self.queue.put(e)


watchdog.utils.BaseThread = BaseThreadWrapper

Solusi apa (perubahan kode) yang ingin Anda lihat di pengawas?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat