Когда я запускаю код ниже, он, кажется, перебирает только половину общего списка рабочих в списке. Затем он переходит к закрытию родительского процесса.Почему этот провал пропускает элементы в списке?
Я очень смущен, почему код ниже не повторяет все элементы в списке, возможно, я слишком долго смотрел на это, чтобы увидеть очевидное? Любая помощь будет оценена по достоинству.
Вот консоль.
Waiting...
[u'worker-1.15579', u'worker-1.15575', u'worker-1.15577', u'worker-1.15570', u'worker-1.15573', u'worker-1.15168', u'worker-1.15170']
The terminate_pid is 15561
Process was SUCCESSFULLY closed.
Process was SUCCESSFULLY closed.
Process was SUCCESSFULLY closed.
no process found with pid 15170
Process was already closed.
Closed terminator window.
Ниже приведен код,
workers_to_be_restarted = [u'worker-1.14524', u'worker-1.14526', u'worker-1.14518', u'worker-1.14528', u'worker-1.14522']
for item in workers_to_be_restarted:
if this_machine == item.split('.')[0]:
if not terminate_pid:
try:
terminate_pid = psutil.Process(psutil.Process(int(item.split('.')[1])).ppid()).ppid()
print "The terminate_pid is {}".format(str(terminate_pid))
except Exception, e:
terminate_pid = None
print e
pass
try:
print "Terminating {}".format(item)
p = psutil.Process(int(item.split('.')[1]))
p.terminate()
time.sleep(1)
print "Process was SUCCESSFULLY closed."
workers_to_be_restarted.remove(item)
except Exception, e:
print e
time.sleep(1)
print "Process was already closed."
workers_to_be_restarted.remove(item)
pass
try: #THE ABOVE SEEMS TO BE EXITING HERE before looping through all the items!? NOT SURE WHY?
if terminate_pid:
p = psutil.Process(terminate_pid)
p.terminate()
print "Closed terminator window."
worker_restart['restart'] = None
worker_restart['workers_to_be_restarted'] = workers_to_be_restarted
Как вы убедитесь, что он не работает? –
Эти 'try'' excepts' являются довольно сомнительной структурой кода. Захватывать исключения, подобные мне, немного меня пугают. – HavelTheGreat
@TimCastelijns - Проверьте выше для вывода. – cph