2024-10-01 00:27:24 发布
网友
在python中,是否有一种跨平台的方式,在一个进程中创建类似Windows命名事件的东西,并将其从另一个进程设置为向第一个进程发送信号?在
我的具体问题是,我需要创建一个进程,该进程在启动时将检查自身的其他实例是否正在运行,如果是,则向它们发出退出信号。对于WindowsAPI,我将使用CreateEvent和lpName参数,以及SetEvent。在
CreateEvent
lpName
SetEvent
我花了大约一天的时间来寻找一个好的答案,下面是我此刻的想法:
可以使用信号向进程指示需要进行某些更改,但是在我正在处理的更复杂的遗留代码库中,它会导致进程崩溃。信令基于python signal docs中断各种I/O进程。您可以使用signal.SIGUSR1实现信号处理程序
signal.SIGUSR1
import signal def signal_handler(signum, stack): print('Signal %d received'%signum) signal.signal(signal.SIGUSR1, signal_handler)
这段代码可以在Linux等中触发。通过:
我现在倾向于使用kazooPython Zookeeper库。它需要以Zookeeper作为基础设施。在
在我的例子中,我确实需要切换配置值。但是Zookeeper支持许多处理器间通信工具,这些工具将满足您的需要。在
更新: 最后我决定使用一个命名管道(FIFO),在线程中使用readline调用它。在
readline
if not os.path.exists(fifo_name): os.mkfifo(fifo_name) while True: with open(fifo_name, 'r') as config_fifo: line = config_fifo.readline()[:-1] print(line)
我使用tempfile.gettempdir()来找到一个好的位置来将FIFO放入文件系统。但是,它需要相当多的改进,因为我不关心解析传递的内容,而您可能会这样做。另外,如果您计划让事件有多个消费者,那么您将只将其传播到一个消费者,因为它是一个队列。在
tempfile.gettempdir()
在我看来,这与其说是一个问题,不如说这在Python中是否可行,而是这样一种跨平台的方法是否存在:如果存在,那么即使不存在直接编写的Python,也可以使用subprocess.call()等进行系统调用。在
subprocess.call()
至于这是否有可能,我不能说是个专家,但稍微搜索一下就发现了thesediscussions,这可能对你有帮助。在
我花了大约一天的时间来寻找一个好的答案,下面是我此刻的想法:
可以使用信号向进程指示需要进行某些更改,但是在我正在处理的更复杂的遗留代码库中,它会导致进程崩溃。信令基于python signal docs中断各种I/O进程。您可以使用
signal.SIGUSR1
实现信号处理程序这段代码可以在Linux等中触发。通过:
^{pr2}$我现在倾向于使用kazooPython Zookeeper库。它需要以Zookeeper作为基础设施。在
在我的例子中,我确实需要切换配置值。但是Zookeeper支持许多处理器间通信工具,这些工具将满足您的需要。在
更新: 最后我决定使用一个命名管道(FIFO),在线程中使用
readline
调用它。在我使用
tempfile.gettempdir()
来找到一个好的位置来将FIFO放入文件系统。但是,它需要相当多的改进,因为我不关心解析传递的内容,而您可能会这样做。另外,如果您计划让事件有多个消费者,那么您将只将其传播到一个消费者,因为它是一个队列。在在我看来,这与其说是一个问题,不如说这在Python中是否可行,而是这样一种跨平台的方法是否存在:如果存在,那么即使不存在直接编写的Python,也可以使用
subprocess.call()
等进行系统调用。在至于这是否有可能,我不能说是个专家,但稍微搜索一下就发现了thesediscussions,这可能对你有帮助。在
相关问题 更多 >
编程相关推荐