首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查python中的某个模块是否每隔1分钟就会得到一个信号?

如何检查python中的某个模块是否每隔1分钟就会得到一个信号?
EN

Stack Overflow用户
提问于 2017-02-28 22:43:40
回答 3查看 90关注 0票数 0

我正在尝试做模块编程。逻辑是网络中将有一个中央设备和两个子设备。子设备将每隔1分钟向中央设备发送一个信号。如果您在1分钟内从其中一个子设备接收到信号,则该设备的状态将被标记为活动。在1分钟后,中央设备必须再次搜索来自该设备的信号。如果在1分钟内未收到该信号,则该特定设备的状态应为停用。

我试着用python来实现这一点。但我不明白如何从不同的子设备中每隔1分钟分别检查信号警报。

当我研究的时候,它表明我必须使用多线程和睡眠计时器的概念。有没有人能给我提个建议,怎么做?

提前感谢!!

EN

回答 3

Stack Overflow用户

发布于 2017-02-28 23:23:51

这些设备位于网络上,这意味着您可以使用Socket在设备之间进行通信。有关在python中使用套接字的更多详细信息,请阅读here。使用Sockets,您可以连续监听从子设备接收到的信号,并仅每分钟更新设备状态。

票数 1
EN

Stack Overflow用户

发布于 2017-02-28 23:06:33

试试这样的东西

代码语言:javascript
运行
复制
import threading
import thread

def recieve_message(ip):
    threading.Timer(60.0, recieve_message).start()
    recieve_message_content

if __name__ == "__main__":
     # Create two threads as follows
     try:
        thread.start_new_thread( recieve_message, (127.0.0.1) )
        thread.start_new_thread( recieve_message, (127.0.0.1) )
     except:
        print "Error: unable to start thread"
票数 0
EN

Stack Overflow用户

发布于 2017-02-28 23:53:08

您可能需要的是一个多客户端服务器,它可以处理来自一组同时连接的客户端的每条消息。一个简单的概念来自模块SocketServer。您必须创建Request Handler的子类,以便告诉服务器如何处理传入的消息。

服务器

代码语言:javascript
运行
复制
import SocketServer

PORT = xxxxx    # Any port you desire

class RequestHandler(SocketServer.BaseRequestHandler) :
def handle(self) :
    address = self.client_address()[0]

    time_0 = time.time()
    while True :
        try :
            buff = self.request.recv(1024)
            time_1 = time.time()
            self.request.send("Okay")
        except SocketServer.socket.error :
            print addr, ">> Connection Failure"
            return

        if time_1 - time_0 > 61 :
            print addr, ">> Timeout"
            return

        # Now do something with the buffer
        # ...

server = SocketServer.ThreadingTCPServer(('', PORT), RequestHandler)
server.server_forever()

您甚至可以将server.serve_forever()放在一个可区分的线程中,以确保在读取缓冲区之后执行的命令不会花费太长时间,并且在请求处理中不会对缓冲区做任何事情。因此,您将有一个线程监听以太网端口并写入缓冲区,另一个线程从该缓冲区读取数据并处理数据。

您可以在将此缓冲区设置为类的属性或使用全局变量时读取它。

客户端

代码语言:javascript
运行
复制
import socket
import time

IP = xxx.xxx.xxx.xxx    # The IP of the server
PORT = xxxxx            # Same port on which the server is listening

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((IP, PORT))

while True :
    time.sleep(60.0)

    try :
        sock.send("Some crazy message")
        buff = sock.recv(1024)

        if buff != "Okay" :
            print "Something went wrong"
            return
    except socket.error :
        print "Connection Failure"
        break

附言:我没有测试这段代码...所以不能保证!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42511713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档