在osc lib modu内部的系统调用

2024-09-30 08:19:38 发布

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

我正在使用找到的OSC库here。 我想通过编程退出程序系统出口()收到特定消息时。在

我用的是下面这样的:

oserve = OSC.OSCServer(('localhost', iportarg))
st = threading.Thread(target = oserve.serve_forever)
oserve.addMsgHandler("/logout", logout_handle)

def logout_handle(addr, tags, stuff, source):
    sys.exit()

发出消息'/logout'将产生以下错误:

OSCServer: SystemExit on request from localhost:55827:

有人知道为什么吗?我在线程锁定的子进程中? 似乎OSC库/模块不允许我在系统进程仍处于活动状态时发出它。 任何想法都会很好。。。在

谢谢, 吉咪


Tags: 程序localhost消息here进程系统编程osc
1条回答
网友
1楼 · 发布于 2024-09-30 08:19:38

我能推荐一种替代方法吗,使用一个标志done=False循环,直到done是{},然后通过终止st线程然后退出来进行清理。在

from gevent import spawn
from gevent.event import AsyncResult
is_done = AsyncResult()
oserve = OSC.OSCServer(('localhost', iportarg))
gl = gevent.spawn(oserve.oserve_forever)
oserve.addMsgHandler("/logout", logout_handle)

def logout_handle():
  global is_done
  is_done.set(True)

terminate_prog = False
while not terminate_prog:
    if is_done.ready():
        terminate_prog = True


st.kill()
sys.exit()

在我看来,像这样的事情更可取一些,你可以适当地清理资源。在

我们正在做的是生成一个两个greenlet都可以与之通信的异步结果,主greenlet循环直到它准备好停止侦听异步结果,另一个greenlet有一个钩子,它最终执行logout_handle,这会向主greenlet发出退出的信号。在

相关问题 更多 >

    热门问题