[英]TypeError in Threading. function takes x positional argument but y were given
[英]TypeError: <Function> takes X positional argument but X were given
我正在尝试对系统中的某些目录进行持续监控,因此我使用了 WatchDog API。 我正在使用的 function:
def watcher(HRSpath):
src_path = HRSpath
event_handler = Handler()
observer = watchdog.observers.Observer()
observer.schedule(event_handler, path=src_path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
我感兴趣的事件只是删除,因为我正在覆盖 WatchDog class 的另一种方法:
class Handler(watchdog.events.PatternMatchingEventHandler):
def on_deleted(self, event):
print("Watchdog received deleted event - % s." % event.src_path)
使用主function:
if __name__ == '__main__':
pth = "/home/abd/Downloads/"
pth2 = "/home/abd/Desktop/"
Proc1 = multiprocessing.Process(target=watcher, args=(pth))
Proc2 = multiprocessing.Process(target=watcher, args=(pth2))
Proc1.start()
Proc2.start()
每当我使用多处理/线程 class 时,代码总是会产生一个错误:
Process Process-1:Traceback(最近一次调用最后):文件“/usr/lib/python3.9/multiprocessing/process.py”,第 315 行,在 _bootstrap self.run() 文件“/usr/lib/python3. 9/multiprocessing/process.py”,第 108 行,运行中 self._target(*self._args, **self._kwargs)最近通话最后):文件“/usr/lib/python3.9/multiprocessing/process.py”,第 315 行,在 _bootstrap self.run() 文件“/usr/lib/python3.9/multiprocessing/process.py”中,第 108 行,在运行中 self._target(*self._args, **self._kwargs) TypeError: watcher() 接受 1 个位置参数,但给出了 18 个
进程以退出代码 0 结束
但是,如果我将主要的 function 代码更改为在单个路径上调用 watcher() 方法,则它可以正常工作:
if __name__ == '__main__':
pth = "/home/abd/Downloads/"
watcher(pth)
完整代码可在此处获得
这是 python 中的缺陷之一:您需要在pth
之后添加一个逗号 :-)
Proc1 = multiprocessing.Process(target=watcher, args=(pth, ))
您的代码将 20 个(分别为 18 个)字符作为 arguments 传递,而不是一个字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.