Python:套接字以时间间隔发送数据
我开发了一个代码,在这个代码中,我每秒都从串口读取数据。相同的数据我必须发送数据到任何IP和端口,但有一个特定的时间间隔,如10秒,30秒等 所以,如何告诉套接字进入睡眠状态,它不会每秒发送数据Python:套接字以时间间隔发送数据,python,python-2.7,python-sockets,Python,Python 2.7,Python Sockets,我开发了一个代码,在这个代码中,我每秒都从串口读取数据。相同的数据我必须发送数据到任何IP和端口,但有一个特定的时间间隔,如10秒,30秒等 所以,如何告诉套接字进入睡眠状态,它不会每秒发送数据 import time time.sleep(x) x:睡眠时间(以秒为单位)您不需要告诉插座进入睡眠状态,插座应该一直在监听。你能做的就是让你的程序每隔一秒钟就这样进入睡眠状态 import time while(true): sock.recv() time.sleep(1) 或者
import time
time.sleep(x)
x:睡眠时间(以秒为单位)您不需要告诉插座进入睡眠状态,插座应该一直在监听。你能做的就是让你的程序每隔一秒钟就这样进入睡眠状态
import time
while(true):
sock.recv()
time.sleep(1)
或者,如果你想更具冒险精神,你可以使用一个epoll循环来检查你的套接字是否收到了任何东西。epoll循环的一个很好的例子在这里,但很可能不是必需的。如果您开始使用socket编程,您可能需要了解一些情况。如果您无法限制socket发送速率,唯一的解决方案是将调用限制在发送套接字上。 首先,您必须在这里做的是将接收到的数据放在一个容器中(看一看),然后,您必须安排发送过程。你可以用一只手来做这个。 它可能看起来像是:
class Exchange(object):
def __init__(self):
#create the queue
#create the sockets
def receive_every_seconds_method(self):
# Here we put the received data into the queue
self.the_queue.put(self.receiving_socket.recv())
def send_data_later(self):
while not self.the_queue.empty():
self.emission_socket.send(self.the_queue.get())
# reschedule
self.schedule()
def schedule(self, timeout=30):
self.timer = Timer(timeout, self.send_data_later)
self.timer.start()
def run(self):
self.schedule(30)
while self.continue_the_job: #this is the stop condition
self.receive_every_seconds_method()
time.sleep(1)
通过这种方式,您将能够每30秒发送一次数据(如果有数据要发送)您实际上无法告诉套接字进入睡眠状态,您可以在其中创建一个包含睡眠的循环(time.sleep(..),或者更好的方法是使用一个单独的线程/pthread和一个堆栈,在该堆栈中您每X秒轮询一次数据,然后对其进行操作(发送或做任何你想做的事情),这样你就不会锁定阅读线程。谢谢你分享了一些好东西,但我想在客户端开发一个逻辑,而不是在服务器端。@MeetAdhia epoll循环可以在客户端和服务器端使用。老实说,我想我们需要更多关于你的问题的信息来正确解决它。你只是不断地发送t吗在您接收到相同的信息后,会将其发送到ip和端口吗?它是否需要更改?间隔是否会更改或始终保持不变?是的,我一直在向ip和端口发送数据。我已通过使用多线程找到了解决问题的方法。