gpt4 book ai didi

python - 为什么我的多线程应用程序的主线程对 Ctrl+C 没有响应?

转载 作者:太空狗 更新时间:2023-10-29 21:58:17 25 4
gpt4 key购买 nike

我编写了一个多线程应用程序来监视和响应给定文件列表中的更改。我有一个 Watch 类,它获取文件大小并在第一次调用时将其设置为 size 变量。然后,几秒钟后它再次获取文件的大小并将其与之前的大小进行比较,如果更改,则将 size 设置为文件的当前大小。此外还有一个 WatchWorker 类,它是 threading.Thread 的子类。 WatchWorker 使用 Watch 类来“监视”给定文件。

现在真正的问题来了:我编写的代码正在运行,并在检测到更改时通知用户。但是当我尝试使用 Ctrl+C 退出应用程序时没有任何响应。我在 Windows 上。

代码:

import time
import threading
import os

class Watch(object):
def __init__(self, path, time=5):
self.path = path
self.time = time
self.size = os.stat(path).st_size



def loop(self):
while True:
time.sleep(self.time)
size = os.stat(self.path).st_size
if size != self.size:
self.size = size
print "Change detected in file {}".format(self.path)



class Watch_Worker(threading.Thread):
def __init__(self, path, *args, **kwargs):
super(Watch_Worker, self).__init__(*args, **kwargs)
self.path = path


def run(self):
super(Watch_Worker, self).run()
Watch(self.path).loop()

def main(*args):
for i in args:
thrd = Watch_Worker(path=i)
thrd.start()
print 'Watching ' + i
print "From main thread"



if __name__ == '__main__':
main('blah.js', 'cs.c', 'ab.rb')

编辑

修改代码以比较生成的值 os.stat('somefile.ext').st_size)

最佳答案

我通过设置self.daemon = True解决了主线程被阻止退出的问题。主线程不等待线程退出。这是通过在 main 函数的末尾添加一个带有 time.sleep(5) 的无限 while 循环来解决的。这是代码:

class Watch_Worker(threading.Thread):
def __init__(self, path, time=2, *args, **kwargs):
super(Watch_Worker, self).__init__(*args, **kwargs)
self.path = path
self.time = time
self.size = os.stat(path).st_size
self.daemon = True


def run(self):
super(Watch_Worker, self).run()
while True:
time.sleep(self.time)
size = os.stat(self.path).st_size
if size != self.size:
self.size = size
print "Change detected in file {}".format(self.path)

def main(*args):
for i in args:
thrd = Watch_Worker(path=i)
thrd.start()
print 'Watching ' + i
while True:
time.sleep(5)


if __name__ == '__main__':
main('blah.js', 'cs.c', 'ab.rb')

关于python - 为什么我的多线程应用程序的主线程对 Ctrl+C 没有响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34557738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com