问题:
线程中竟然无法访问全局变量,或者说线程中访问的不是之前定义的全局变量.
直接上代码
import socket
import binascii
import sys
import threading
import time
from flask import Flask
app = Flask(__name__)
str_cmd = "\x01\x03\x01\x10\x00\x32\xC4\x26"
threadLock = threading.Lock()
buf = "No data"
def getdata():
try:
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("127.0.0.1", 8234))
s.listen(8)
sock, addr = s.accept()
print "Client IP :Port is "+str(addr)
global buf
while True:
sock.sendall(str_cmd)
tmp = sock.recv(512)
threadLock.acquire()
buf = binascii.b2a_hex(tmp)
threadLock.release()
time.sleep(3)
except:
sys.exit(1)
@app.route('/')
def data():
global buf
return buf
if __name__ == '__main__':
thd=threading.Thread(target=getdata)
thd.setDaemon(True)
thd.start()
app.run(debug=False,host="127.0.0.1", port=8080)
上边代码很简单,就是把socket拿到数据,用restfull对外提供.
上边代码正常执行,如果把 app.run(debug=False,host="127.0.0.1", port=8080) 中的debug改成True,线程中的访问的buf,不是之前定义的.................,造成restful那边一直是"No data"
wtf.............坑了好长时间,没有找到问题原因.