2017-02-20 13 views
0
if __name__=='__main__': 

print("================================================= \n") 

print 'The test will be running for: 18 hours ...' 
get_current_time = datetime.now() 

test_ended_time = get_current_time + timedelta(hours=18) 

print 'Current time is:', get_current_time.time(), 'Your test will be ended at:', test_ended_time.time() 

autodb = autodb_connect() 
db = bw_dj_connect() 

started_date, full_path, ips = main() 



pid = os.getpid() 

print('Main Process is started and PID is: ' + str(pid)) 

start_time = time.time() 

process_list = [] 

for ip in ips: 
    p = Process(target=worker, args=(ip, started_date, full_path)) 
    p.start() 
    p.join() 
    child_pid = str(p.pid) 
    print('PID is:' + child_pid) 
    process_list.append(child_pid) 

child = multiprocessing.active_children() 
print process_list 

while child != []: 
    time.sleep(1) 
    child = multiprocessing.active_children() 


print ' All processes are completed successfully ...' 
print '_____________________________________' 
print(' All processes took {} second!'.format(time.time()-start_time)) 

У меня есть скрипт для тестирования python, который должен работать в течение 18 часов, а затем убивать себя. Скрипт использует многопроцессорность для нескольких устройств. Данные, которые я получаю от функции main(), будут меняться по времени.Как запустить скрипт в течение 18 часов в Python?

Я передаю эти три аргумента методу рабочего в многопроцессорной обработке.

Как я могу это достичь?

+0

Вы спрашиваете, как убить процесс или как рассказать, когда прошло 18 часов? –

+0

Возможно, вам легче использовать команду терминала 'timeout' для запуска вашего скрипта. – BallpointBen

+0

Описание до «Как я могу достичь этого» заставляет его звучать так, как будто вы уже «достигли этого». –

ответ

0

если вам не нужно беспокоиться о очистках слишком много на ребенке процессы вы можете убить их с помощью .terminate()

... 
time.sleep(18 * 60 * 60) # go to sleep for 18 hours 
children = multiprocessing.active_children() 
for child in children: 
    child.terminate() 

for child in multiprocessing.active_children(): 
    child.join() # wait for the children to terminate 

если вам нужно сделать некоторые очистки во всех дочерних процессах, то вам необходимо изменить их цикл цикла (я принимаю while True), чтобы отслеживать время прохождения и иметь только второй цикл while в основной программе, ожидая, когда дети уйдут самостоятельно.

0

Вы никогда не сравниваете datetime.now() с test_ended_time.

# check if my current time is greater than the 18 hour check point. 
While datetime.now() < test_ended_time and multiprocessing.active_children(): 
    print('still running my process.') 

sys.exit(0) 

 Смежные вопросы

  • Нет связанных вопросов^_^