Найти - Пользователи
Полная версия: Непонятная ошибка в поточной обработке
Начало » Python для экспертов » Непонятная ошибка в поточной обработке
1
ks
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:
В чем может быть ошибка и как заставить это работать?
s0rg
В выводе есть строчка ‘* recording’ - в коде ее нет, значит код не полный.
На первый взгляд не хватает вот этого: http://docs.python.org/library/threading.html#threading.Thread.join
Так как при запуске внутри интерпретатора работе нити никто не мешает, а вот в программе main вполне может завершиться до того как отработает нить.
ks
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)?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB