在Windows中使用python相当于sigusr1-2信号



我需要一些帮助。我正在努力在windows中的两个python进程之间发送通知。

我已经看过信号模块,但不幸的是,用户定义的信号在windows中不受支持。

Windows使用了另一种叫做消息的东西,但我不知道它是如何工作的,也不知道如何在python中使用它。如果有人有一个想法或在python进程之间发送消息的起点,将不胜感激。

这真的取决于你在寻找什么-你是否想要控制消息,非阻塞消息,或者像你通常使用signal模块那样捕获外部信号的能力。

既然你想发送"两个python进程之间的通知",我推荐multiprocessing.connection模块的客户端和侦听器类,用于一个非常简单的面向消息的连接对象对:

http://docs.python.org/2/library/multiprocessing.html module-multiprocessing.connection

进程A:

listener = Listener(('localhost', 9000)) # local TCP connections on port 9000
remote_conn = listener.accept()
listener.close()
print remote_conn.recv()
# prints 'a pickle-able object'
print remote_conn.recv()
# prints "['another', 'pickle-able', 'object']"

进程B:

client = Client(('localhost', 9000))
client.send('a pickle-able object')
client.send(['another', 'pickle-able', 'object'])

这些类是内置的,这让我很高兴——不需要安装!只是要小心地遵循文档中关于安全性和取消pickle数据的指导。

Windows平台不存在SIGUSR1SIGUSR2。您可以这样确认:

C:>python
Python 3.7.0 (default, Jun 28 2018, 08:04:48) [MSC v.1912 64 bit (AMD64)] :: Anaconda custom (64-bit) on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import signal
>>> dir(signal)
['CTRL_BREAK_EVENT', 'CTRL_C_EVENT', 'Handlers', 'NSIG', 'SIGABRT', 'SIGBREAK', 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_IGN', 'Signals', '_IntEnum', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_enum_to_int', '_int_to_enum', '_signal', 'default_int_handler', 'getsignal', 'set_wakeup_fd', 'signal']

这是Windows的官方文档

尝试通过套接字进行进程间通信。

相关内容

  • 没有找到相关文章

最新更新