python 多线程http失败切换功能

本文探讨了在Python中使用多线程和锁机制实现并发操作的方法,并通过一个具体的实例展示了如何在不同线程间同步全局变量。重点介绍了如何避免数据竞争和死锁等问题,以及如何有效地利用多核处理器提升程序性能。
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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值