我有很多設備需要獲取狀態更新。一個套接字對象就是我所有的,而socket.recv()就是我需要的狀態。放入一個單線程應用程序,不會出現問題:如何在Python中實現線程socket.recv()?
class Device:
def receive(self):
log.debug("receive waiting: %r", self.device_id)
try:
packet = self.socket.recv(255)
except Exception as e:
self.report_socket_error(e)
self.reconnect()
log.debug("received response: %r", self.device_id)
d = Device()
d.connect()
while True:
d.receive()
然而,包裹在一個threading.Thread類相同的代碼會導致死鎖和滑稽的行爲。用鎖包裝並沒有改變任何東西。我將問題追溯到socket.recv()調用...那麼,如何實現多個線程,其中每個線程擁有一個套接字(1個線程只擁有一個套接字),它們能夠同時等待數據?
在此先感謝
你爲什麼要鎖?你是否分享任何資源?根據POSIX發送/ recv是原子操作。可能是你沒有很好地使用線程。你能分享你已經實現線程的代碼嗎? – Arunmu 2011-04-23 14:14:46