На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD
  
    > Остановка скрипта Python , В мультитредовом приложении
      1. Имеется Win32 приложение EXE которое имеет основной поток GUI и дополнительный.

      2. Взаимодействие с питоном происходит через Python27.dll

      3. При запуске приложения в основном потоке делается:
      ExpandedWrap disabled
            Py_SetProgramName("11111");  /* optional but recommended */
            Py_Initialize();


      4. При разрушении приложения делается
      ExpandedWrap disabled
            Py_Finalize();


      5. В дополнительном потоке загружается скрипт и производится его выполнение(бесконечный цикл скрипта)
      ExpandedWrap disabled
        ThreadFunc
        {
        <<< Star WinAPI thread >>>
                ............
            PyObject* PyFileObject = PyFile_FromString("Mytest.py", "r");
            PyRun_SimpleFile(PyFile_AsFile(PyFileObject), "Mytest.py");
                ............
        <<< Exit WinAPI thread >>>
        }


      Mytest.py
      ExpandedWrap disabled
        import time, re, random
         
         
        print ('test script')
         
        while True :    
                i = 1
                while i < 80 :
                    i = i+1
                    for k  in range (0, 10) :    
                        idx = (i+k) % 10
                        if k < 3 :
                            print ('step 1')                    
                        else :
                            print ('step 2')                                            
                    time.sleep(5.0)




      Вопрос, как завершить выполнение Python скрипта чтобы PyRun_SimpleFile возвратила управление и был произведен выход из ThreadFunc ????
        http://docs.python.org/2/library/threading.html

        Кстати у нас есть раздел по Python.

          По ссылке ничего такого нету ответа на мой вопрос.

          Цитата
          Кстати у нас есть раздел по Python.

          Нашел, почему то он находиться в Web технологиях, хотя он как язык на общих основаниях так же близок как и к SEO
            Цитата korvin @
            чтобы PyRun_SimpleFile возвратила управление

            необходимо, чтобы скрипт выполнился. А если в скрипте бесконечный цикл, то возврата не будет

            А зачем вам выход? Убейте поток
              Цитата
              А зачем вам выход? Убейте поток

              Выход это чтобы корректно завершить программу.
              Поток то я убью, только python.dll с большой вероятностью создает свой поток под выполнение скрипта, а он и так и останется висеть, при при выгрузке процесса я получу AV

              Пробовал вызывать функцию Py_Exit(0).

              Если вызываю так:
              ExpandedWrap disabled
                PyGILState_STATE state = PyGILState_Ensure();
                Py_Exit(0);
                PyGILState_Release(state);

              то весь процесс зависает.

              если вызываю так
              ExpandedWrap disabled
                Py_Exit(0);


              ТО получаю AV в python.dll
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0240 ]   [ 15 queries used ]   [ Generated: 26.04.24, 12:18 GMT ]