不发送(或接收)queu的Unix套接字

2024-05-20 13:16:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一对用C和Python编写的发送方/接收方代码。客户机正在生成数据,并通过unix套接字将其发送到接收方。接收器并不总是监听套接字,因为它应该对接收到的数据执行某些操作。在

在我当前的代码中,发送方发送的所有消息都在队列中等待接收方接收,但我不希望出现这种行为。我想让发送方知道接收者现在很忙(甚至可能会引发一个错误)。那么如何将接收方的队列长度设置为零呢?在

请考虑我不希望发送或接收过程被阻塞。在

我的代码的接收者和发送者部分是:

接收器(Python):

self.app_socket = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
self.app_socket.settimeout(0.01)
self.app_socket.bind(APP_SOCKET)

def poll(self, *args):
    try:
        message = self.app_socket.recv(1024)
    except socket.timeout:
        return

发件人(C):

^{pr2}$

Tags: 数据代码selfapp消息客户机队列过程
2条回答

你不能从发送方知道接收方发生了什么。可能是接收者进程甚至还没有安排好。唯一合理的方法是从接收者回给发送者,在这里您可以等待一段时间等待这个回答,然后决定接收者是否忙。在

你需要一些方法让接收者把它的状态(读或不读)发送给发送者。 有几种IPC原语可以用于此目的。在

或者你可以自己编。 例如,接收者可以这样做:

    mkdir("/path/to/my/flag/dir", 0555);  /* ready */
    read();
    rmdir("/path/to/my/flag/dir");       /* busy */

发送者可以周期性地检查是否存在这样的情况:

^{pr2}$

相关问题 更多 >