ファイルから(約100万)行を読み取り、それらの行をリストにコピーする単純なアプリを作成しています。次の行が異なる場合は、前の行がスレッドを実行して、そのリストで何らかのジョブを実行します。スレッドジョブはtcpソケットに基づいており、telnetlibを介してコマンドを送受信します。
アプリケーションがハングして何もしないことがあります。try-exceptステートメントにラップしたすべてのtelnet操作、およびソケットへの読み取りと書き込みにもタイムアウトがあります。
私はウォッチドッグを書くことを考えました。ウォッチドッグは、sys.exit()またはそのハング状態で同様の何かを実行します。しかし、今のところ私はそれを作成する方法を考えています、そしてそれでもそれを行う方法がわかりません。だから、あなたが私をたどることができれば、それは素晴らしいことです。
そのファイルに対して、40個のスレッドを作成しています。擬似コードは次のようになります。
lock = threading.Lock()
no_of_jobs = 0
class DoJob(threading.Thread):
def start(self, cond, work):
self.work = work
threading.Thread.start(self)
def run(self)
global lock
global no_of_jobs
lock.acquire()
no_of_jobs += 1
lock.release()
# do some job, if error or if finished, decrement no_of_jobs under lock
(...)
main:
#starting conditions:
with open(sys.argv[1]) as targetsfile:
head = [targetsfile.next() for x in xrange(1)]
s = head[0]
prev_cond = s[0]
work = []
for line in open(sys.argv[1], "r"):
cond = line([0])
if prev_cond != cond:
while(no_of_jobs>= MAX_THREADS):
time.sleep(1)
DoJob(cond, work)
prev_cond = cond
work = None
work = []
work.append(line)
#last job:
DoJob(cond, work)
while threading.activeCount() > 1:
time.sleep(1)
よろしくJ