我想要一个检查文件是否有变化的函数 每次发现更改时,它都会启动一个线程并将流返回给调用者。
def if_file_changes(file_loc):
import threading, time
with open(file_loc, 'r') as nctn:
state = nctn.read()
while True:
time.sleep(5)
with open(file_loc, 'r') as nctn:
check_state = nctn.read()
if check_state != state:
state = check_state
check_state = None
t = threading.Thread(return) # How do I return in a thread?
t.daemon = True
t.start()
修改
我不明白这个问题。当我应该在调用者处时,我试图在功能级别创建线程
我的解决方案如下。
答案 0 :(得分:0)
您可以通过在新线程中设置全局值来实现返回线程:
G_THREAD_RET = None
def thread_func():
#do something here
G_THERAD_RET = ret
def main():
#this is the main thread function
# wait for child thread here
ret = G_THERAD_RET # get the return value of child thread
如果您只有几个线程可以从中获取返回值,这是最简单的。
此外,您可以将一个参数传递给线程函数,并在线程退出之前将其设置在新线程中:
def func(ret=[]):
time.sleep(2)
ret.append(2)
def main():
ret = []
t = threading.Thread(target=func,args=(ret,))
t.start()
t.join()
print ret
你必须使用一个列表来返回值,因为在python中只有list和dict是可变的。
PS:你真的需要阅读整个文件来检查是否有一些变化?检查时间戳对于检测文件更改更为常见。
答案 1 :(得分:0)
我所做的更正是将调用者模块化为函数,以便可以根据需要重复任何部分。然后导入文件检查器并在需要的地方调用它。
功能:
def on_file_change(func=None, file_loc=None, start_activated=False):
import threading, time
def s():
with open(file_loc, 'r') as nctn:
state = nctn.read()
while True:
time.sleep(5)
with open(file_loc, 'r') as nctn:
check_state = nctn.read()
if check_state != state and check_state != None and check_state != '':
state = check_state
t = threading.Thread(target=func)
t.start()
if start_activated == True:
t = threading.Thread(target=func)
t.start()
s()