- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个模块使用 python“threading”实现并发,使用“signal”实现关闭 Hook :
signal.signal(signal.SIGINT, self.shutdownhook)
我有另一个使用 dbus 和 gobject 的模块
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
....
GObject.threads_init()
mainloop = GObject.MainLoop()
mainloop.run()
当我分别运行它们时,它们都按预期运行并且 ctrl+c
通过“KeyboardInterrupt”导致终止。
但是,当我同时运行它们时,主循环终止但永远不会调用关闭 Hook - 进程不会在没有 kill -9 pid
的情况下终止。
谁能解释一下为什么会这样,以及如何最好地整合这两个模型
这是一个突出我的问题的工作示例。我无法仅使用 CTRL+C 退出程序,并且在这种情况下也不会调用关闭 Hook 。
import threading
import signal
import sys
from gi.repository import GObject
def runMainloop():
print('running mainloop')
mainloop.run()
def shutdown():
print('shutdown')
def readInput():
print('readInput')
print(sys.stdin.readline())
if __name__ == '__main__':
signal.signal(signal.SIGINT, shutdown)
signal.signal(signal.SIGTERM, shutdown)
GObject.threads_init()
mainloop = GObject.MainLoop()
mainloopThread = threading.Thread(name='mainloop', target=runMainloop)
mainloopThread.setDaemon(True)
mainloopThread.start()
print('started')
inputThread = threading.Thread(name='input', target=readInput)
inputThread.start()
print('started input')
最佳答案
没有人感兴趣,我试试吧。
只是在同一页面上:
import signal
from gi.repository import GObject
GObject.threads_init()
mainloop = GObject.MainLoop()
signal.signal(signal.SIGINT, lambda n, f: mainloop.quit())
mainloop.run()
此代码有效:
import signal
from gi.repository import GObject
signal.signal(signal.SIGINT, lambda n, f: print("kill"))
GObject.threads_init()
mainloop = GObject.MainLoop()
mainloop.run()
我首先注册了信号处理程序,然后启动了循环。奇怪的是它没有被调用。然而结果是 - 正如预期的那样......
作为旁注 - 根据他们的文档... mainloop
已弃用。这是第一件事。
这是从 MainLoop
中的 stdin
读取的示例:
import signal
import sys
from gi.repository import GObject, GLib
GObject.threads_init()
def readInput():
print('readInput\n')
while True:
input = sys.stdin.readline()
print(input)
if input.strip() == 'exit':
print('closing main loop')
mainloop.quit()
print('terminating thread')
return
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal.SIG_DFL)
mainloop = GObject.MainLoop.new(None, False)
GObject.timeout_add(1000, readInput)
# inputThread = threading.Thread(name='input', target=readInput)
# inputThread.start()
# print('started input')
print('running mainloop\n')
try:
mainloop.run()
except KeyboardInterrupt:
mainloop.quit()
添加 .new(None, False)
允许 CTRL-C
正常工作。取自here , 还有 here是另一个关于将脉冲音频 Controller 与 GLib
/GObject
循环集成的线程。有关于将 dbus 与循环集成的示例,但我不确定您希望采用哪种方式...
关于python gobject.mainloop 吞噬信号事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47647200/
我试图找到一些关于 tk.mainloop() 与 root.mainloop() 的使用的问答或文章,但没有成功。 我的问题是:这两种用途之间有什么区别吗?对我来说,正确的方法是使用 tk_inst
我是 Stack Overflow 的新成员。我找到了这个线程,但不允许对其发表评论或提问,所以我想我只能在这里引用它:How can I make a in interactive list in
我是 python 的新手,正在尝试设置功能测试环境。测试环境应通过 DBus 接收信号并对其进行评估。 DBus 信号使用 GLib MainLoop。我有以下封装循环的类: class Signa
我有一个 Python 脚本,可以根据 D-Bus 事件执行操作,这是其简化版本: import dbus from dbus.mainloop.glib import DBusGMainLoop i
有没有办法让我在后台运行 mainloop()?我不想增加线程的复杂性。提前致谢。 最佳答案 没有。 GUI 框架的主循环必须始终在前台运行。 关于Python:有没有办法让我在后台运行 mainlo
这不是 Python tkinter mainloop not quitting on closing the window 的副本 我有一个基于 tkinter 构建的应用程序。我观察到有时在我使用
我正在尝试创建一个使用 tkinter 显示图像的程序。到目前为止,我编写的代码完美地显示了图像,但是程序在 tkinter 窗口关闭之前不会继续。我想知道是否有任何函数代替 .mainloop()
我正在使用 wxWdigets(确切地说是 wxPython)来显示一些模式对话框。 本页https://wxpython.org/Phoenix/docs/html/wx.EventLoopBase
应用简介: 我有 Cordova/Ionic 应用程序和自定义 Cordova 插件以执行 native 代码。 插件包含单独的 CameraActivity(扩展 FragmentActivity)
在主程序主循环中,我正在通过调用 tibemsMsgConsumer_Receive 来收听 EMS 主题。同时,我想在特定时间退出程序,比如下午 5 点。我该如何实现? 我尝试使用以下代码,但在没有
我有来自 online tutorial 的以下代码通过制作一个在单击鼠标时改变状态的 parking 灯来学习基于事件的编程。这是我的全部代码: import turtle turtle.setup
我们在项目中使用Python2.3和wxPython V2.4.2.4。而且运行良好。现在我们将其升级到Python2.7和wxPython2.8.12.1。我们的项目在新版本中编译得很好。但在我们的
我正在尝试创建一个基本的 Tkinter 窗口。 根据在线教程,要创建一个窗口,必须使用以下命令: import Tkinter window=Tkinter.Tk() window.mainloop
我有一个模块使用 python“threading”实现并发,使用“signal”实现关闭 Hook : signal.signal(signal.SIGINT, self.shutdownhook)
我是 Android 世界的新手。跟随和我应该使用哪个在主线程上运行方法之间到底有什么区别? 1) Handler mainHandler = new Handler(getApplicationCo
到现在为止,我曾经用 tk.mainloop() 结束我的 Tkinter 程序,否则什么都不会出现!见例子: from Tkinter import * import random import t
我在我的 Python 应用程序中使用 PyGObject 的 GLib.MainLoop() 并有一个问题。 是否可以处理 loop.run() 中引发的 Python 异常? 例如,我正在使用 G
好吧,我正在编写一个程序,以对应该在循环中显示字母的文本进行动画处理: Th 不过 汤姆 托马 托马斯 托马斯 托马斯苏 托马斯成功... 依此类推,直到重置,然后再次循环。问题是, tkinter
我不熟悉 python,特别是 GUI 问题。我正在尝试添加其他类的图像,我找到了一种添加其他对象但不添加图像的方法。此代码工作正常: from Tkinter import * from PIL i
我正在使用 Python 进行编程,但有几个问题无法在任何地方找到答案(请阅读所有问题,因为它们构成了我的最后一个问题): 1..mainloop() 的作用是什么?我阅读了 Stack Overfl
我是一名优秀的程序员,十分优秀!