Переменные Python между модулями / классами - PullRequest
0 голосов
/ 19 февраля 2011

SiteGrab.py

class ThreadManager:
    bla bla bla bla

    While True: #### Ask if/unitl all sites are resolved
        if allsites got = True:
            for i in range(allsites):
                HTML[i].insert(0, "this is a peice of text")
                break


    def GetDNS(self):
        global HTML
        return(HTML)

execute.py

from SiteGrab import *

    manager = ThreadManager()
    manager.start(bla, bla, bla)
    _HTML_ = manager.GetDNS()
    print(_HTML_)

Я пытаюсь загрузить список сайтов HTML. Я делаю это в темах (например, 5 сайтов = 5 тем). Я хотел бы получить уведомление КАК КАЖДЫЙ веб-сайт закончен. Другими словами, если на одном из 5 веб-сайтов будет установлен тайм-аут, я не хочу ждать тайм-аут, прежде чем я получу остальные 4 результата. Я хочу, чтобы они просочились, когда они закончат.

Вот где я застрял. У меня есть модуль GrabSite.py, который отправляет результаты на главный Модуль. Но основной модуль должен спрашивать результаты ...

_HTML_ = manager.GetHTML()
print(_HTML_)

... и это можно сделать только после ...

manager.start(bla, bla, bla) ... завершено. Но manager.start(bla, bla, bla) будет завершен только после разрешения LAST-сайта.

Как я могу изменить это так, чтобы результаты переходили в execute.py?

Спасибо за помощь!

Ответы [ 3 ]

0 голосов
/ 19 февраля 2011

Это лучше сделать, используя асинхронную модель в одном потоке.Twisted Framework делает это.Вы также можете использовать pycurl с его обработчиком CurlMulti.Модуль client.py может выполнить 1000 запросов в секунду, используя его.

0 голосов
/ 19 февраля 2011

Посмотрите на «многопроцессорный» модуль Python. Он содержит несколько вариантов выполнения многопроцессорной обработки right (например, использование пула процессов). Можно настроить произвольные обратные вызовы, например, для оповещения о наличии результата.

0 голосов
/ 19 февраля 2011

Я хотел бы получить уведомление КАК КАЖДЫЙ веб-сайт завершен.

Кем? Как? Это имеет очень мало смысла. Вы хотите, чтобы это "Bing!" когда это будет сделано? Добавьте это к сценарию.

Я хочу, чтобы они просочились, когда они закончат.

Сюда, где? Файл? Каталог?

Что execute.py делает с этими сайтами?

Ваши требования не имеют большого смысла.

curl site1 >file1 & curl site2 >file2 & curl site3 >file3 & ...

Все пять запускаются одновременно . Никаких потоков, только процессы на уровне ОС, использующие как можно больше ресурсов ОС. Нет ожидания Результаты накапливаются одновременно.

Учтите это.

( for site in site1 site2 site3 site4 site5
do
    curl $s | python execute.py &
done
)
echo "Bing!"

Это получит все пять одновременно . Каждый из них будет передан в стандартный ввод для execute.py для обработки с использованием простого sys.stdin.read().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...