模块/类之间的Python变量

时间:2011-02-19 14:12:47

标签: python class variables

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个线程)。 我希望收到AS EACH网站完成后的通知。换句话说,如果5个网站中的一个要超时,我不想在得到其他4个结果之前等待超时。我希望他们在完成时涓涓细流。

这是我被困的地方。我有一个GrabSite.py模块,可以将结果发送到Main 模块。但主要模块必须要求结果......

_HTML_ = manager.GetHTML()
print(_HTML_)

......它只能在......后才能这样做。

manager.start(bla, bla, bla) ...已完成。但manager.start(bla, bla, bla)只会在解决最后一个网站后完成。

如何更改此设置以使结果流入execute.py?

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

  

我希望在每个网站完成后收到通知。

由谁?怎么样?这没什么意义。你想要它“bing!”什么时候完成?将其添加到脚本中。

  

我希望他们在完成时涓涓细流。

涓涓到哪里?一份文件?一个目录?

execute.py对这些网站有何作用?

您的要求毫无意义。

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

所有五个同时运行 。没有线程,只有OS级进程使用尽可能多的OS资源。没等了。结果同时涓涓细流。

考虑一下。

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

这将同时获得所有五个 。每个人都将通过管道传输到execute.py的标准输入,以便使用简单的sys.stdin.read()进行处理。

答案 1 :(得分:0)

在单个线程中使用异步模型可以做得更好。扭曲的框架就是这样。您也可以将pycurl与其CurlMulti处理程序一起使用。 client.py模块可以使用它在一秒钟内完成1000个请求。

答案 2 :(得分:0)

查看Python的“多处理”模块。它包含多个用于执行多处理 right 的选项(例如使用进程池)。可以配置任意回调,例如用于表示结果的可用性。