我正在使用在我的iPhone上运行的应用程序的Wi-Fi恒温器。它使用套接字使用内置套接字库与python程序进行通信。我遇到的问题是,我希望能够在手机未连接时改变温度但服务器将搜索1秒然后超时(iPhone连接的最短时间)这不是让我可以通过旋转编码器平稳地调节温度。有没有办法在后台蓄水池?
import sys
import socket
import os
import time
temp = 15
while True:
try:
HOST = '192.168.1.22'
PORT = 10000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen(1)
s.settimeout(1)
conn, addr = s.accept()
#conn.send(str(9).encode())
conn.send(str(temp).encode())
while True:
data = conn.recv(1024)
if not data: break
print(data)
print(data.decode())
data2 = data.decode()
if int(data2) in range(5, 31):
print(data2)
print("Setting the temperature to " + str(data2) + "°")
conn.send(("Setting the temperature to " + str(data2)).encode())
temp = data2
else:
print("Not in range")
conn.send("Not in range!\n".encode())
except:
print("No Connection!")
谢谢!
答案 0 :(得分:0)
你的术语有点令人困惑,但我想我知道你要做的是什么。当你的程序以1秒的超时执行accept
时,那不是“搜索” - 它只是在等待客户端。
听起来你应该将你的代码分成三部分:
我会将每个放在一个单独的线程中(使用python threading
模块)。创建FIFO队列(使用queue
模块)。让第一个(恒温器 - 调节器)线程等待队列(Queue.get
),让另外两个接受指令(分别来自TCP和旋转编码器)并通过队列(Queue.put
)提供命令
然后你可以摆脱TCP侦听器中的超时,并让它无限期地阻塞accept
。同样,您的旋转编码器监听器可以简单地等待调整。并且恒温器调节器线程可以阻止等待来自队列的指令。这使得所有三个更容易编程,理解和排除故障。