简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM