2016-03-16 30 views
2

我正在使用Python 2.7。在調用另一個腳本後立即繼續使父代腳本

class Client(): 

    def __init__(self, host, server_port): 
     """ 
     This method is run when creating a new Client object 
     """ 

     self.host = 'localhost' 
     self.server_Port = 1337 

     # Set up the socket connection to the server 
     self.connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     self.receiver = None 
     self.myParser = MessageParser() 

     # TODO: Finish init process with necessary code 
     self.run() 

    def run(self): 
     self.connection.connect((self.host, self.server_Port)) 
     self.receiver = MessageReceiver(self, self.connection) #On this line, a MessageReceiver object is instantiated. 
     self.take_input() 


class MessageReceiver(Thread): 

    def __init__(self, client, connection): 
     super(MessageReceiver, self).__init__() 

     self.myClient = client 
     self.connection = connection 

     self.daemon = True 
     self.run() 

    def run(self): 
     self.myClient.receive_message(self.connection.recv(1024)) #This line blocks further progress in the code. 

當在客戶端對象運行方法實例化一個的messageReceiver對象,我要立即執行的客戶端中下一行代碼,而無需等待來自的messageReceiver退出代碼。有沒有辦法做到這一點?

回答

4
self.run() 

改爲撥打start()run()在當前線程中執行run方法。 start()旋轉另一個線程並在那裏調用它。

self.start()