gpt4 book ai didi

perl - 如何正确关闭POE和POE::Session?

转载 作者:行者123 更新时间:2023-12-01 23:47:05 30 4
gpt4 key购买 nike

POE调用 POE::Kernel->stop() 会导致立即关闭。如何请求优雅关机,等待 yield、post、call FIFO 为空后再关机?

最佳答案

What would be the recommended approach to end up the event loop waiting for certain tasks while ignoring others?

首先,等待您要完成的任务。

他们完成后,您有几个选项可以在剩余任务完成之前结束事件循环。

一个是调用POE::Kernel->stop()。这将停止事件循环,并且主要的 POE::Kernel->run() 调用将返回。之后通常没什么可做的,但有些程序会在那里做一次性终结。

另一种是杀死进程。 杀死(术语 => $$)。使用将导致操作系统终止进程的信号。不过,这非常苛刻。

您可以通过使用 POE::Kernel->sig() 调用注册一个 SIGTERM 处理程序来减轻打击。这将让您在 SIGTERM 到达时运行一些代码,但它再次将关闭一切的负担放在您的程序上。

其他苛刻的选项包括 exit(),它至少允许对象运行 DESTROYEND block 。如果您希望他们不这样做,总有 POSIX::_exit() 代替。当然还有 die()

如果您不想涉及操作系统,可以使用 POE::Kernel->signal(TERM => $kernel) 调用来注入(inject)伪造的 SIGTERM。当真正的 SIGTERM 到达时,这实际上是 POE::Kernel 在幕后所做的。

您还可以使用 POE::Kernel->signal() 向各个 session 发送信号。作为模拟信号的好处之一是它不一定适用于整个程序。

从最推荐到最不推荐的顺序:

  • 以适当的意图关闭一切。
  • 使用 POE::Kernel->signal() 终止特定的顽固 session 。
  • POE::Kernel->stop()
  • exit() 及其同类。

关于perl - 如何正确关闭POE和POE::Session?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28587833/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com