【问题标题】:Python Sockets - How to create an interrupt when data is being receivedPython Sockets - 如何在接收到数据时创建中断
【发布时间】:2015-09-23 05:00:16
【问题描述】:

我知道使用套接字可能不是最好的方法,但我已经开发了一些非常简单的代码,我使用 Python 套接字 (UDP) 从一个 Raspberry Pi 向另一个 Raspberry Pi 发送数据,但我无法做到查找有关如何在收到数据时创建中断的示例。基本上我有一个进程正在运行,我不希望它等待 s.recvfrom 接收数据。我在下面附上了基本代码,我可以使用一些帮助为我指明正确的方向。

import socket
import sys
import os

UDP_IP = '192.168.0.96'
UDP_PORT = 5008

data = "abcd"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('', UDP_PORT))

while(1)
    data, addr = s.recvfrom(1024)

【问题讨论】:

  • 你是说异步编程吗?
  • 可能!我的大部分代码只是一个循环,我不想让它挂在 s.recvfrom 等待数据或超时。
  • 使用asyncio 模块或类似的东西。
  • 您能否解释一下这句话:“知道使用套接字可能不是最好的方法”?为什么套接字不合适?

标签: python sockets interrupt


【解决方案1】:

我还不能发表评论,否则我会的。

我不知道您使用这些数据的确切用途,但您可能能够断开 UDP 连接并将数据附加到列表或数据库中。那么当您的脚本需要处理数据时,它应该就像访问该列表/数据库一样简单。

【讨论】:

  • 感谢您的回复!我想过给它穿线,但我在穿线方面做得不多。从那时起,我真的希望得到一个中断,我不必担心检查状态,我所要做的就是等待中断。我正在尝试做的一个方面是向另一个 Pi 发送命令,告诉它终止进程。
  • 所以如果我理解正确的话,你希望另一个 Pi 连接回来并通过 UDP 通知你的脚本它需要被杀死,然后脚本响应告诉它它可以杀死进程?所以基本上这个 Pi 正在监视另一个脚本完成/失败/挂起的情况。
  • 基本上只有一个 pi 运行一个进程,当它收到一个“中断”(通过套接字从另一个 Pi)说有来自另一个 Pi 的数据而不是读取命令并终止进程时(或按命令执行)。
【解决方案2】:

您可以使用 select (https://docs.python.org/2/library/select.html) 找出哪个套接字有 io 等待并处理它。这非常有效,您不必担心中断。

【讨论】:

  • 感谢您的建议。我查看了“选择”,但很难弄清楚它是如何工作的。你知道我可以看看的例子(找不到)吗?
  • 这里是 C 版本。看看你能不能用类似的方式使用它stackoverflow.com/questions/15592089/…
  • 我找到了一个例子,但我有问题,所以我在这里创建了一个新帖子:stackoverflow.com/questions/32753709/…
  • @user3723727 已经回答你了
猜你喜欢
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 2013-02-15
相关资源
最近更新 更多