2013-11-11 5 views
0

Я делаю генетическую программу, и у меня есть проблема. Похоже, что он попытается вычислить большие экспоненты, но замерзнет (что понятно, потому что это большое количество) в этом процессе. Есть ли способ выполнить казнь? Таким образом, я мог бы остановить вычисление, прежде чем он замерзнет в течение нескольких минут. Спасибо за помощь!Eval() замораживание для больших экспонентов

+1

У меня есть отличная идея: не используйте 'eval' !! – aIKid

+1

[Threads] (http://www.ibm.com/developerworks/aix/library/au-threadingpython/) для тяжелой вычислительной работы. – clcto

+0

'eval' - это плохой материал. Также вам нужно показать нам код, чтобы узнать, что с ним не так. – aIKid

ответ

0

Как правило, вы действительно не хотите делать то, что вы просите. (На самом деле там есть более одного красного флага). Но если вы это сделаете:

Единственный способ, с помощью которого вы можете позволить что-то запустить, а также время - это поместить его в отдельный поток или процесс.

Если вы хотите, чтобы иметь возможность принудительно прервать что-то, это должен быть процесс.

Так, например:

import multiprocessing 

def try_slow_thing(function, args, timeout): 
    p = multiprocessing.Process(target=function, args=args) 
    p.start() 
    p.join(timeout) 
    if p.is_alive(): 
     p.terminate() 
     raise TimeoutError("stupid process wouldn't finish") 

Если вы хотите, чтобы вернуть значение из функции, или стоимости акций от основного процесса, или что-нибудь еще более причудливой, чем просто «запустить и закончить или нет », прочитайте вступительные части документов multiprocessing и просмотрите остальные. (На самом деле, все равно.)

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