Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 14, 2012 12:14:12

ks
От:
Зарегистрирован: 2009-05-20
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятная ошибка в поточной обработке

class TGFC():

def __init__(self, working_time):
self.timer = WFMSR.RECORD_SECONDS
self.archive = []
self.working_time = working_time
self.iterations = working_time/self.timer

self.arch_result = self.our_files_creating()

def WFMSR_add(self, f_index):
self.archive.append(WFMSR(f_index))

def archive_appending(self, prefix='', postfix=''):
for i in enumerate(range(self.iterations)):
threading.Timer(self.timer, self.WFMSR_add('_'+prefix+str(i[0])+postfix))

def our_files_creating(self):
thread.start_new_thread(self.archive_appending, ('', ''))
time.sleep(1.5)
thread.start_new_thread(self.archive_appending, ('', '1'))
...
def main():
our_main_instance = TGFC(10)

if __name__ == '__main__':
main()
Собственно вопрос заключается в следующем - когда я делаю вот так:
>>> import myModule
>>> a = TGFC(10)
, все запускается и файлы создаются как надо.

Но когда я делаю так:
D:\Python26>python.exe file.py
* recording
* recording
, получается такая фигня:
Unhandled exception in thread started by
Error in sys.excepthook:

Original exception was:
В чем может быть ошибка и как заставить это работать?



Отредактировано (Фев. 14, 2012 13:17:36)

Офлайн

#2 Фев. 14, 2012 12:25:32

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Непонятная ошибка в поточной обработке

В выводе есть строчка ‘* recording’ - в коде ее нет, значит код не полный.
На первый взгляд не хватает вот этого: http://docs.python.org/library/threading.html#threading.Thread.join
Так как при запуске внутри интерпретатора работе нити никто не мешает, а вот в программе main вполне может завершиться до того как отработает нить.

Отредактировано (Фев. 14, 2012 12:27:22)

Офлайн

#3 Фев. 14, 2012 12:34:17

ks
От:
Зарегистрирован: 2009-05-20
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

Непонятная ошибка в поточной обработке

s0rg
В выводе есть строчка ‘* recording’ - в коде ее нет, значит код не полный.
Логично. :) В данном случае мы, создавая экземпляр TGFC-класса создаем экземпляр WFMSR(f_index) - с определенным индексом, несколько раз, и ложим его в self.archive, нашего TGFC. При создании WFMSR делается нечто, что нам и печатает результат, создавая файлы в определенной папке.

s0rg
На первый взгляд не хватает вот этого: http://docs.python.org/library/threading.html#threading.Thread.join
Так как при работе внутри интерпретатора работе нити никто не мешает, а вот в программе main вполне может завершиться до того как отработает нить.
Не понял :[ Можно другими словами? Вроде бы код идентичный.
При вызове функции main() из интерпретатора тоже программа выполняется без ошибок.

Можно пример измененного кода TGFC, который демонстрирует, куда нужно пихнуть этот .join() (http://docs.python.org/library/threading.html#threading.Thread.join)?



Отредактировано (Фев. 14, 2012 12:37:34)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version