2015-05-12 2 views
0

У меня есть вишневое приложение, которое вызывает подпроцесс (subprocess.Popen), он отлично работает в большинстве случаев, но иногда он не работает. Когда я перезапускаю сервер, subprocess.popen вызывается и работает нормально. Есть ли способ контролировать потоки в черри и проверить, почему subprocess.popen не был вызван.cherrypy thread не создает подпроцесс

Update: нить продолжает остальную часть кода, и я мог бы ответ, только проблема в том, подпроцесс не называется

образец кода

def fn_test(self,**args): 
    #return args['md5'].split()[0] 
    final_html="the complete html" 
    for i in ['ab','cd','ef']: 

     if args.has_key(i): 
      cherrypy.session[i]='checked' 
     else: 

      cherrypy.session[i]='' 



    subprocess.Popen(["python","test.py",'test','aval','bval']) 
    return final_html 
+1

Можете ли вы показать упрощенную версию своего кода, который воспроизводит проблему? – saaj

+0

saaj извините за задержку в ответе, я добавил пример кода, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы, также проблема у меня есть subprocess.popen не запускается время от времени – user1865928

+0

Расскажите подробнее о том, что делает подпроцесс. Как вы узнали, что это не было вызвано? Я не вижу вмешательства в возвращаемое значение. Какова цель подпроцесса? У вас есть вход в модуль, чтобы вы могли рассуждать о его правильности? Почему вы не можете импортировать модуль и использовать его напрямую? – saaj

ответ

0

Для простых и случайных фоновых задач I рекомендуем cherrypy.process.plugins.BackgroundTask. Взгляните на this question для полного примера и другого общего рассмотрения фоновых задач.

В частности, рассматривая проблему subprocess, убедитесь, что вы можете обосновать правильность своего кода фона. По крайней мере, сделайте несколько записей logging при запуске, остановке и опционально до/после значительных изменений состояния в модуле. Также для отладки предлагайте заменить вашу команду чем-то действительно простым, что гарантированно будет ошибкой. Например, date >> date.log. Тогда будет ясно, возникает ли проблема из-за недостатка фонового модуля или из-за проблемы нереста процесса.

+0

saaj, спасибо большое, я попытаюсь реализовать его таким образом. Знаете ли вы, есть ли какой-нибудь partuicular readon, что фоновый процесс не будет вызываться из cherrypy? – user1865928

+0

@ user1865928 Рабочий поток CherryPy - это нормальный поток, который когда-то начинался до тех пор, пока не остановится или не перезапустится CherryPy. Поэтому я не вижу основополагающей причины, почему нереста процесса не должна работать. Вы можете захотеть взглянуть на [Bugtracker] CherryPy (https://bitbucket.org/cherrypy/cherrypy/issues?status=new&status=open), если вы считаете, что это на стороне CherryPy. Хотя я не думаю, что это вероятно. – saaj

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

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