私はPythonを初めて使用し、明日までにプロジェクトを提出しようとしています。私はPythonを使用してubuntuのログ監視システムを開発しています。ログ分析用のクラスを設計しました。ここで、一度に1つ以上のログを監視するために、2つのスレッドを呼び出し、クラスの2つのインスタンスを呼び出します。
最初にコードを実行すると、両方のスレッドが実行されます。しかし、後でスレッド2のみが実行されます。スレッド1はそうではありません。
それを修正するためにどこで変更を加える必要があるか教えてください。または、他のマルチスレッドシステムを提案します。関数のリンク参照を入れてください。勉強する時間があまりありません。小さなコード修正は非常に役立ちます。
def start_thread():
last_time=strftime("%Y-%m-%d %H:%M:%S", gmtime())
global CheckVar1
global CheckVar9
CheckVar1 = 1
CheckVar9 = 1
mylist.insert(END,last_time+" LOG MONITORING ACTIVATED.")
#lock=thread.allocate_lock()
thread.start_new_thread(_thread,("Thread No:1",1))
thread.start_new_thread(_thread1,("Thread No:2",8))
#------------------------------
def _thread(string2,sleeptime,*args):
#lock.acquire()
lineCount=0;
check=0;
print string2
#mylist.insert(END,"checking,,,")
#time.sleep(sleeptime);
logic()
def _thread1(string3,sleeptime2,*args):
#lock.acquire()
lineCount=0;
check=0;
print string3
#mylist.insert(END,"checking,,,")
#time.sleep(sleeptime2);
logic1()
btn_start = Button(app, text = "GO >>")
btn_start.grid(row=3,column=1,sticky=W);
btn_start["command"]=start_thread
class LogWatcher(object):
def __init__(self, log_file_name, callback):
self.log_file_name = log_file_name
self.callback = callback
global count_number_of_line
print log_file_name
self.initial_counting(log_file_name)
def looping(self, waiting_time=5):
while 1:
self.check_change(self.log_file_name, count_number_of_line)
print count_number_of_line
time.sleep(waiting_time)
def initial_counting(self, log_file_name):
.....
def check_change(self, log_file_name, last_count):
.......
def logic():
.....
m=LogWatcher("/var/log/auth.log", callback)
m.looping()
def logic1():
...
l=LogWatcher("/var/log/kern.log", callback2)
l.looping()
ここに完全なコードを入れませんでした。しかし、誰かがそれを実行したい場合は、ここからダウンロードできます