Python: многопоточность. Простейший таймер

Опубликовано admin 21.01.2010

Была в visual basic 6.0, на котором я когда-то программировал такая тема: если запустить долгий или бесконечный цикл, то прога как бы повисала, то есть на кнопки я жать уже не мог, пока цикл не кончится. Чтобы так не происходило надо было в теле цикла подписывать “doevents” или как-то так, чтобы оно при каждой итерации шло и исполняло накопленные события.

В Python естесственно тоже самое, однако реализован другой механизм: потоки. То есть по сути я могу создать многопоточное приложение, что собственно тут в двух словах и опишу.

Уже упоминал, что в моем секретном проекте таскменеджера нужен таймер. Вот вам общая концепция:

import thread, time

def timer_print():
while 1: # бесконечный цикл
time.sleep(1)
thread.start_new_thread(timer_print,())

Только есть одна проблема =) таймер пока что не остановить и приходится перезапускать. Однако решение скорее всего будет такое: при запуске проги, запускается поток таймера, который в переменной хранит время, прошедшее с начала запуска проги. Далее в нужный момент выхватываем время начала и время конца. Еще вариант - наверняка Python как и php имеет переменную “секунды с момента запуска линукса в 1970 году” - это по идее аналог того, что предложено выше и поток не нужен.
Зато нашел по поводу потоков пост в одном интересном блоге:

http://python4seo.ru/?p=67

Python: парсинг xml

Опубликовано admin 21.01.2010

Там дофига библиотек оказалось, но так как я пока не научился их доустанавливать, то пользуюсь стандартной: minidom. Вот классная рекурсивная функция, которая деревом выводит:

import xml.dom.minidom
dom = xml.dom.minidom.parse(”expression.xml”)

dom.normalize()

def output_tree(node, level=0):
if node.nodeType == node.TEXT_NODE:
if node.nodeValue.strip():
print “. “*level, node.nodeValue.strip()
else: # ELEMENT_NODE или DOCUMENT_NODE
atts = node.attributes or {}
att_string = “, “.join(
["%s=%s " % (k, v) for k, v in atts.items()])
print “. “*level, node.nodeName, att_string
for child in node.childNodes:
output_tree(child, level+1)

output_tree(dom)

А собсно вот источник: http://www.intuit.ru/department/pl/python/7/6.html


Copyright © 2007 Doorway blog. All rights reserved.