无法使用全局变量来计算线程

时间:2015-04-19 05:25:22

标签: python

我试图使用全局变量来计算线程数。

l = range(1, 11)
clientCount = 0
listLock = threading.Lock()
def clientThread(conn):
    which listLock:

        global clientCount
        print(clientCount)

        clientCount =+ 1
        connectionSocket.send(bytes(str(randInt) + ' ' + str(clientCount)))
        choi = connectionSocket.recv(1024)
        print('User-' + str(clientCount) + ' Random int: ' + str(randInt) + ' result: '+ choi)
        connectionSocket.close()

while 1:
    connectionSocket, addr = serverSocket.accept()
    start_new_thread(clientThread,)

第一次打印得到0。 从第二次印刷,我只能获得1clientCount发生了什么事?它不应该每次加1吗?

更新: 我修复了clientCount = + 1,但结果仍然不是我想要的。 clientThread函数处理多线程套接字连接。

0
1
1
1
1
1

1 个答案:

答案 0 :(得分:4)

您在功能中将clientCount设置为+ 1。您需要改为使用clientCount += 1

您还希望在打印前增加clientCount以获得正确的计数。此外,不是手动释放锁(如果您之前遇到异常,将会失败),请使用with块(文档:Python2Python3):

def clientThread(conn):
    with listLock:
        global clientCount
        clientCount += 1
        print(clientCount)