<python> 전역 변수 선언???
글쓴이: antz / 작성시간: 수, 2004/02/25 - 12:35오후
안녕하세요.
python으로 소켓 테스트용 thread 프로그램을 하나 만들고 있습니다.
테스트 성공과 실패로 결과를 개수로 보고 싶은데요.
우선 시험으로 쓰레드 갯수를 세볼려고 allcnt라는 전역변수(?)
를 써서 해보았는데 다음과 같은 에러가 납니다.
조언 부탁드립니다.
Quote:
ine 11, but no encoding declared; see http://www.python.org/peps/pep-0263.html f
or details
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/local/lib/python2.3/threading.py", line 436, in __bootstrap
self.run()
File "testclient.py", line 50, in run
allcnt = allcnt + 1
UnboundLocalError: local variable 'allcnt' referenced before assignmentException in thread Thread-2:
Traceback (most recent call last):
File "/usr/local/lib/python2.3/threading.py", line 436, in __bootstrap
self.run()
File "testclient.py", line 50, in run
allcnt = allcnt + 1
UnboundLocalError: local variable 'allcnt' referenced before assignment
#!/usr/bin/env python
import sys
import socket
import string
import binascii
import random
from struct import *
from threading import Thread
import time
key = [ "꽃배달", "중화요리", "부동산", "택배", "피자", "이사", "여행사", "렌트카", "여행사", "야식"]
# counter_lock = Lock()
allcnt = 0
class Request(Thread):
def __init__(self, id, count):
Thread.__init__(self)
self.id = id
self.count = count
# self.fail_cnt = 0
# self.success_cnt = 0
def mkSendMsg(self, pMsg):
newMsg = string.replace(pMsg, '^', binascii.unhexlify('1B'))
return newMsg
def mkRecvMsg(self, pMsg):
newMsg = string.replace(binascii.unhexlify('1B'), pMsg, '^')
return newMsg
def run(self):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("127.0.0.1", 15001))
odata = "^key=" + key[self.id] + "^do=00^city=^dong=^pnum=1^psize=15^adcount=0^ipg=^ipark=^icoupon=^order=1^mode=0^rndseed=1^dsort=0^dsize=6250000^sx=508167^sy=1104677"
realdata = self.mkSendMsg(odata)
datasize=len(realdata)
N1 = datasize/256
N0 = datasize%256
n_major = 103
n_minor = 21
send_data = pack("%dsBBBBBB%ds" % (2, 512), "FP", 0, N1, N0, n_major, n_minor, 0, realdata);
# print calcsize("ccBBBBBB")
# datasize = datasize + 8;
s.sendall(send_data)
allcnt = allcnt + 1
s.settimeout(0)
s.setblocking(1)
data = s.recv(8128, socket.MSG_PEEK)
token = string.split(data, chr(27))
if len(token) > 1 :
result = string.split(token[1], '=')
if result[1] == '0':
str_result = "Success"
else :
str_result = "Fail(Token)"
else :
str_result = "Fail(Data)"
if data[0] + data[1] == 'FP' :
datasize = ord(data[3])*256 + ord(data[4])
r_major = ord(data[5])
r_minor = ord(data[6])
print "[" + str_result + "] ", r_major, r_minor, datasize
s.close()
def usage():
print "testclient [num]"
if len(sys.argv) != 2 :
usage()
sys.exit(1)
nthreads = string.atoi(sys.argv[1])
for j in range(60):
for i in range(nthreads):
rv = random.randrange(0,9)
w = Request(rv, 8)
w.start()
time.sleep(1)
# print "Result Report"
# print "All : " + counter + ", Success : " + success_cnt + ", Fail : " + fail_cnt
print allcntForums:


메소드 안에서 allcnt쓰기 전에 [code:1]global allcn
메소드 안에서 allcnt쓰기 전에
global allcnt를 쓰세요.감사합니다. :-)잘됩니다.
감사합니다. :-)
잘됩니다.
Lum7671's Weblog
댓글 달기