python 多線程http失敗切換功能

import threading
import time
gj=0
lock=threading.Lock()
def g_num(j=0):
    global gj
    if j==1:
        if lock.acquire():
            gj+=1
            lock.release()
class TestThread(threading.Thread):

    def __init__(self, thread_num, ipaddr):
        super(TestThread, self).__init__()
        self.thread_num = thread_num
        self.ipaddr=ipaddr
        self.stopped = False
        #self.timeout = timeout

    def run(self):
        n=0
        while not self.stopped:
            print "%s : %s - %s"%(self.thread_num,n,self.ipaddr)
            if n==2:
                g_num(1)
                n=0
            n+=1
            time.sleep(1)

    def stop(self):
        self.stopped = True
    def restart(self):
        self.stopped = False

    def isStopped(self):
        return self.stopped
def t_func(thread_num):
    n=0
    while 1:
        print "%s : %s"%(thread_num,n)
        n+=1
        if n==2:
            #print "exec g_num"
            g_num(1)
        time.sleep(1)

#thread=TestThread(1)
#thread.start()
#thread.start()
#time.sleep(5)
#thread.stop()
tn=[1,2,3,4,5]
thread_list=[]
ip=('IP-A','IP-B')
ip_num=0
def ip_change():
    global ip_num
    if(ip_num<len(ip)):
        n=ip_num
    else:
        ip_num=0
        n=ip_num
    ip_num+=1
    return ip[n]
ipaddr=ip_change()
for i in tn:
    thread_list.append(TestThread(i,ipaddr))
n=0
for i in thread_list:
    n+=1
    print n
    i.setDaemon(True)
    i.start()
while 1:
    print "gj num is :%s"%gj
    if gj>5:
        ipaddr=ip_change()
        print "gj>0 %s: %s"%(gj,ipaddr)
        gj=0
        for i in thread_list:
            i.stop()
            i.join(1)
            #print "isDaemon %s"%i.isDaemon()
            #print "isAlive %s"%i.isAlive()
        thread_list=[]
        for i in tn:
            thread_list.append(TestThread(i,ipaddr))
        for i in thread_list:
            i.setDaemon(True)
            i.start()
    else:
        g_num()
    time.sleep(1)
#print('Main thread Wainting')
#time.sleep(2)
#print thread.isStopped()
#thread.stop()
#print thread.isStopped()
#thread.join()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章