我想在创建线程开始时将字典发送到线程.part与我的问题相关的代码如下(此代码尝试将一个 websocket 映射到另一个 none web-socket):
class SimpleEcho(WebSocket):
def SockFun(self,**FlagDict):
try:
print "6"
ms=mysocket()
print "7"
ms.connect("127.0.0.1",7778)
print "8"
while (1):
print FlagDict
print "9"
FlagDict["sockexists"]=1
print "90"
#data=FlagDict["Data"]
msg=str(self.data)
self.data=''
print "91"
#FlagDict["Data"]=''
print "92"
#msg=str(self.data)
print msg
print "93"
#print self.FlagDict
ms.mysend(msg)
print "10"
a=ms.myreceive()
print "11"
self.sendMessage(a)
print "12"
FlagDict["sockexists"]=0
print "13"
FlagDict["threadexists"]=0
ms.myclose()
print "14"
except Exception as a:
FlagDict["sockexists"]=0
FlagDict["threadexists"]=0
ms.myclose()
print "error in SockFun",a
def handleMessage(self):
print "2"
if self.data is None:
print "3"
self.data = ''
else:
self.FlagDict["Data"]=self.data
self.CheckThread()
print "20"
class WebSocket(threading.Thread):
def __init__(self, server, sock, address):
self.server = server
self.client = sock
self.address = address
self.handshaked = False
self.headerbuffer = ''
self.readdraftkey = False
self.draftkey = ''
self.headertoread = 2048
self.hixie76 = False
self.fin = 0
self.data = None
self.opcode = 0
self.hasmask = 0
self.maskarray = None
self.length = 0
self.lengtharray = None
self.index = 0
self.request = None
self.usingssl = False
self.state = self.HEADERB1
# restrict the size of header and payload for security reasons
self.maxheader = 65536
self.maxpayload = 4194304
self.FlagDict={}
self.FlagDict["sockexists"]=0
self.FlagDict["threadexists"]=0
def CheckThread(self):
self.FlagDict["Data"]=self.data
print self.FlagDict
try:
print "4"
if self.FlagDict["threadexists"]==0:
print "5"
self.FlagDict["threadexists"]=1
print "15"
ts=threading.Thread(target=self.SockFun(),args=self.FlagDict)
# ts=threading.Thread(target=self.SockFun())
print "16"
ts.deamon=True
print "17"
ts.start
print "18"
print "19"
except Exception as d:
print "error in handleMessage",d
print "202"
运行时的代码输出如下所示:
("127.0.0.1", 51180) 已连接 1 2 {'Data': bytearray(b'Page-1;'), 'sockexists': 0, 'threadexists': 0} 4 5 15 6 7 8 {} 9 90 91 92 页-1; 93 10 11 12 {'袜子存在': 1} 9 90 91 92
93 10 11 12 {'袜子存在': 1} 9 90 91 92
93 10 11 12 {'袜子存在': 1} 9 90 91 92
93 10 11 12 {'袜子存在': 1} 9 90 91 92
93 10 11 12 {'袜子存在': 1} 9 90 91 92
93 10
如您所见,threading.thread将空字典传递给SockFun函数。 为什么会发生这种情况,我该如何解决?有关WebSocket模块的更多信息,您可以看到:https://github.com/opiate/SimpleWebSocketServerhttp://opiate.github.io/SimpleWebSocketServer/
好的,我不会使用你的代码,只是给你一个例子,我相信你会自己处理的:
>>> from threading import Thread
>>> def f(**kwargs):
print(kwargs)
>>> Thread(target=f, kwargs={'1':1, '2':2}).start()
{'2': 2, '1': 1}