Queue的简单运用——实习笔记

实习中接触的第二个任务,之前已经写了一个版本,不过上周用的时候感觉好烂,又重新写了一个。

感觉有些程序,还是要跑起来了才知道怎么样,当时就是因为没有测试,以为写的还可以了,结果上周一跑,问题都出来了。诶~

贴下代码~

__author__ = 'glcsnz123'
# -*- coding: utf-8 -*-
import httplib
import os
import socket
import signal
import sys
import thread, threading
import time


def getIPAddressList():
    if os.path.isfile("ip.list"):
        return [ip for ip in open("ip.list", 'r').read().split('\n') if ip.strip() != '']
    return []


def remove_quote(nae):
    if nae.startswith('"'):
        return nae[1:-1:1]
    return nae


def getDomainList():
    if os.path.isfile("domain.list"):
        res = [domain for domain in open("domain.list", 'r').read().split('\n') if domain.strip() != '']
    else:
        res = []
    return map(remove_quote, res)


HEADERS = {"Host": "cet.99sushe.com", "User-Agent": "Mozilla/5.0 (X11; Linux i686)"};


def getDomainVersion(doName):
    if True:
        return "null"
    conn = httplib.HTTPConnection("127.0.0.1")
    conn.request("GET", "/get-upreferer-ver?domain=" + doName)
    res = conn.getresponse()
    return res.read()


mylock = thread.allocate_lock()


def Logger(*msg):
    global mylock
    try:
        mylock.acquire()
        print " ".join(map(str, msg))
    finally:
        mylock.release()


def ConnectToServer(doName, ipName):
    try:
        HEADERS["Host"] = doName
        conn = httplib.HTTPConnection(ipName)
        conn.request("GET", "/upyun-health-check.nofile", headers=HEADERS)
    except socket.gaierror, sg:
        Logger(sg, doName, " - ", ipName)
        return None
    except socket.error, se:
        Logger(se, doName, " - ", ipName)
        return None
    except Exception, ex:
        Logger(ex, doName, " - ", ipName)
        return None
    try:
        res = conn.getresponse()
    except Exception, ex:
        Logger(ex, doName, " - ", ipName)
        return None
    msg = res.read()
    if msg != 'ok':
        if res.status not in range(200, 300):
            Logger("[WARNING]", res.status, res.reason, doName, " - ", ipName)
        else:
            Logger("[WARNING]", repr(msg), doName, " - ", ipName)
        return None
    res = res.getheader("X-Msg-Ver")
    conn.close()
    if res is None:
        Logger("[WARNING]X-Msg-Ver is Empty!", doName, " - ", ipName)
        return None
    return res


def Exit(a, b):
    sys.exit(-1)


def main():
    iplist = getIPAddressList()
    dlist = getDomainList()
    for ditem in dlist:
        dver = getDomainVersion(ditem)
        for ipitem in iplist:
            ver = ConnectToServer(ditem, ipitem.strip())
            if ver == dver:
                Logger(ditem, " - ", ipitem, "is oked!")
            elif ver is not None:
                Logger("[WARNING]" + ver, ditem, " - ", ipitem)


import Queue

joblist = Queue.Queue(1000)
#multi-thread
def Worker():
    global joblist
    while True:
        doName, ipName = joblist.get(block=True, timeout=30)
        ver = ConnectToServer(doName, ipName)
        cor_ver = getDomainVersion(doName)
        if cor_ver == ver:
            Logger(doName, " - ", ipName, "is oked!")
        elif ver is not None:
            Logger("[WARNING]" + ver, doName, " - ", ipName)


def Multi_Thread(thread_num):
    global joblist
    dlist = getDomainList()
    iplist = getIPAddressList()
    for i in range(thread_num):
        thread.start_new_thread(Worker, ())

    for doName in dlist:
        for ipName in iplist:
            joblist.put((doName, ipName.strip()), block=True)

    while True:
        if joblist.empty():
            time.sleep(30)
            break
        time.sleep(30)


if __name__ == '__main__':
    signal.signal(signal.SIGINT, Exit)#信号绑定
    Multi_Thread(100)
 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值