等待信号开始从python

时间:2015-06-11 22:02:26

标签: python signals ipc

我在python中有两个独立的进程: producer consumer 。生产者生成文件,消费者对文件进行一些处理。

为了测试这两个应用程序,我发现自己不断启动两个程序,而生产者有一个延迟功能等,这很痛苦。

在python中实现某种信令机制的最快方法是什么,以便消费者说“GO!” 生产者开始做它做的事情。

这样我就可以让制作人一直在运行。

1 个答案:

答案 0 :(得分:2)

一种简单的方法(你没有提到你关心的平台,所以我假设你想要一些跨平台的东西)是一个带有已知端口的UDP套接字。如果消费者只是侦听localhost端口12345,它可以在每次需要等待时阻止System.out.println(...)调用,并且生产者可以执行sock.recvfrom通知它。

例如,这里是消费者:

sock.sendto

还有制片人:

#!/usr/bin/env python

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('127.0.0.1', 12345))

while True:
    dummy, addr = sock.recvfrom(1024)
    # work on files until done

需要考虑的其他事项:

  • 在Unix上,使用Unix套接字而不是UDP套接字是有好处的。
  • 在Windows上,使用命名管道而不是套接字是有好处的。
  • 您可能希望在Unix或Windows上的Windows服务上为消费者设置daemon(带或不带内置"服务"工具来启动和停止它)。 (您甚至可以将服务工具合并到生产者中,因此,例如,默认行为是在没有消费者的情况下启动消费者,然后在完成后将其关闭,但它也可以是用于在后台启动长期运行的消费者。)
  • 您可以非常轻松地扩展此功能,以便发送更多信息,例如,如果您已完成制作,则会发送不同的消息。