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?
感谢您的帮助!
答案 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)
答案 2 :(得分:0)
查看Python的“多处理”模块。它包含多个用于执行多处理 right 的选项(例如使用进程池)。可以配置任意回调,例如用于表示结果的可用性。