[英]why threading.thread pass empty dictionary to function thread in python
I would like to send a dictionary to a thread at the begining of its creation.part of my code that relates to my problem is as follow (this code tries to map a websocket to a another none web-socket): 我想在创建线程时将字典发送给线程。与我的问题有关的部分代码如下(此代码试图将一个websocket映射到另一个非websocket):
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"
code output at runtime is as follows: 运行时的代码输出如下:
('127.0.0.1', 51180) connected 1 2 {'Data': bytearray(b'Page-1;'), 'sockexists': 0, 'threadexists': 0} 4 5 15 6 7 8 {} 9 90 91 92 Page-1;
('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 {'sockexists': 1} 9 90 91 92
93 10 11 12 {'sockexists':1} 9 90 91 92
93 10 11 12 {'sockexists': 1} 9 90 91 92
93 10 11 12 {'sockexists':1} 9 90 91 92
93 10 11 12 {'sockexists': 1} 9 90 91 92
93 10 11 12 {'sockexists':1} 9 90 91 92
93 10 11 12 {'sockexists': 1} 9 90 91 92
93 10 11 12 {'sockexists':1} 9 90 91 92
93 10 11 12 {'sockexists': 1} 9 90 91 92
93 10 11 12 {'sockexists':1} 9 90 91 92
93 10
93 10
as you can see threading.thread pass empty dictionary to SockFun function. 如您所见,threading.thread将空字典传递给SockFun函数。 why this is happened and how can I solve it?
为什么会发生这种情况,我该如何解决? fore more info about WebSocket module you can see: https://github.com/opiate/SimpleWebSocketServer http://opiate.github.io/SimpleWebSocketServer/
有关WebSocket模块的更多信息,请参见: https : //github.com/opiate/SimpleWebSocketServer http://opiate.github.io/SimpleWebSocketServer/
OK, I won't use your code, just give you an example and I'm sure you'll handle it yourself: 好的,我不会使用您的代码,仅举一个例子,我确定您会自己处理的:
>>> from threading import Thread
>>> def f(**kwargs):
print(kwargs)
>>> Thread(target=f, kwargs={'1':1, '2':2}).start()
{'2': 2, '1': 1}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.