它可以分为两部分:一个线程用于创建实时每五分钟一次,一旦它有新的数据,数据将被发送到连接插座。如何每五分钟向多个客户端并行发送数据
套接字连接在主线程中建立并由每个生成线程处理。以下代码给出了简要说明,目的是每隔五分钟将glb_data的值发送到所有这些连接的套接字。
import time
from multiprocessing import Process
class Climate(Object):
def update(self, glb_data):
while True:
time.sleep(5)
glb_data += 1
def send_data(connection, glb_data):
xml_text = glb_data.encode()
xml_len = len(data)
connection.sendall(str(xml_len).encode() + b' ' +xml_text)
if __name__ == "__main__":
glb_data = ""
cli_obj = Climate()
cli = Process(name="climate_data", target=cli_obj.update_data, args=(glb_data,))
cli.start()
sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sockobj.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
print "run launchserver"
sockobj.bind((serverHost, eval(serverPort)))
sockobj.listen(5)
while True:
connection, address = sockobj.accept()
print('Server connected by', address)
handleclient = Process(name='handleclient', target=send_climate_data, args=(connection,glb_data))
handleclient.start()
的问题如下:
- 如何获得所有socket连接,并调用SEND_DATA功能 在产卵线程中运行。就像观察者模式一样,它将是完美的。
- 如何确保每个线程都收到最新的glb_data。
标题很奇怪,“实时数据”和“每五分钟”似乎并不合适。 –
@KlausD。也许有点奇怪,但“五分钟”和“实时”之间没有矛盾。实时只意味着您保证在指定的时间内完成 - 时间限制可能因应用程序而异。 – skyking