gpt4 book ai didi

python - 如何在python中实现线程socket.recv()?

转载 作者:行者123 更新时间:2023-12-03 11:56:13 26 4
gpt4 key购买 nike

我有许多设备需要从中获取状态更新。我只需要一个套接字对象,而我只需要 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 个线程独占 1 个套接字),它们能够同时等待数据?

提前致谢

最佳答案

我知道这并不能回答您有关如何解决死锁问题的问题,但是在您的情况下,它似乎是因为您使用线程是开销:

您可以只使用一个线程,在其中使用 select()找出哪个socket有可用数据,然后处理上报的数据。除非处理需要很长时间或您的协议(protocol)更复杂select应该没问题,避免所有线程问题。

看看http://docs.python.org/howto/sockets.html#non-blocking-sockets更多细节。

关于python - 如何在python中实现线程socket.recv()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5764534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com