我目前正在学习Python和Classes,我有一个基本的问题,但我没有找到任何答案.假设我有这个虚拟课程
class DomainOperations:
def __init__(self, domain):
self.domain = domain
self.domain_ip = ''
self.website_thumbnail = ''
def resolve_domain(self):
#resolve domain to ipv4 and save to self.domain_ip
def generate_website_thumbnail(self):
#generate website thumbnail and save the url to self.website_thumbnail
Run Code Online (Sandbox Code Playgroud)
我想同时运行resolve_domain和generate_website_thumbnail,当线程完成时,我想打印IP和缩略图.
编辑:我知道我应该使用线程,也许是这样的
r = DomainOperations('google.com')
t1 = threading.Thread(target=r.resolve_domain)
t1.start()
t2 = threading.Thread(target=r.generate_website_thumbnail)
t2.start()
Run Code Online (Sandbox Code Playgroud)
但是我应该在课外使用它们吗?我应该写另一个类来处理线程吗?
这样做的正确方法是什么?
我是python的新手(我来自PHP),我一直在阅读教程和尝试几天,但我无法理解这个队列示例(http://docs.python.org/2/library /que.html)
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done
Run Code Online (Sandbox Code Playgroud)
我不明白的是工作线程是如何完成和存在的.我已经读过q.get()块,直到一个项可用,所以如果所有项都被处理并且没有留在队列中,为什么q.get()不会永远阻塞?
我正在尝试构建快速脚本来解析单个域名的所有DNS记录.'ANY'命令似乎可以解决这个问题,但我对TTL有一些奇怪的问题.当使用ANY时这样
domain = dns.name.from_text(domain)
nameserver = '127.0.0.1'
query = dns.message.make_query(domain, dns.rdatatype.ANY)
response = dns.query.udp(query, nameserver, timeout = 2)
print response
Run Code Online (Sandbox Code Playgroud)
返回的数据是我需要的,但是当TTL到期时,脚本只是不返回过期的记录.'DIG domain ANY'命令似乎也有这个问题.
所以我的问题是获取单个域的所有DNS记录的最快方法是什么?
我有一个简单的whois脚本
if($conn = fsockopen ($whois_server, 43)) {
fputs($conn, $domain."\r\n");
while(!feof($conn)) {
$output .= fgets($conn, 128);
}
fclose($conn);
return $output;
}
Run Code Online (Sandbox Code Playgroud)
$ whois_server = whois.afilias.info; //用于信息域的whois服务器
但我想通过代理运行.所以我需要连接到代理 - >然后连接到whois服务器 - >然后发出请求.像这样的东西?
$fp = fsockopen($ip,$port);
fputs($fp, "CONNECT $whois_server:43\r\n $domain\r\n");
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我不知道我是否正确进行第二次连接.