为什么threading.thread将空字典传递给Python中的函数线程



我想在创建线程开始时将字典发送到线程.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}

相关内容

  • 没有找到相关文章

最新更新