我想在 python3 下使用 Flask Web 应用程序和 python 子进程之间的桥梁。我找不到可复制粘贴的、无需配置文件即可实例化的服务示例。
想要这样做的原因是为了我可以拥有多个线程/进程并使用单个 Dbus 进程作为应用程序实例之间的会话代理来保存游戏状态。
我发现的所有简单的 Dbus 示例仅包含 python2.x 演示或您喜欢的任何主循环载体的旧版本。
答案1
此示例需要:
python3-dbus.mainloop.pyqt5, python3-dbus
服务器示例:
import signal, sys
signal.signal(signal.SIGINT, signal.SIG_DFL)
from PyQt5.QtCore import *
import math
import dbus
import dbus.service
from dbus.mainloop.pyqt5 import DBusQtMainLoop
class Server(dbus.service.Object):
def __init__(self):
busName = dbus.service.BusName('org.documentroot.Fisticuffs', bus = dbus.SessionBus())
dbus.service.Object.__init__(self, busName, '/Fisticuffs')
#Insert subprocesses here...
@dbus.service.method('org.documentroot.Fisticuffs', in_signature = 's', out_signature = 's')
def move(self, a): return "Move recieved"
@dbus.service.method('org.documentroot.Fisticuffs', in_signature = 'dd', out_signature = 'd')
def add(self, a, b): return a+b
DBusQtMainLoop(set_as_default = True)
app = QCoreApplication(sys.argv)
server = Server()
app.exec_()
客户端示例:
import dbus
bus = dbus.SessionBus()
server = bus.get_object('org.documentroot.Fisticuffs', '/Fisticuffs')
print('5 and 10 are:')
print(server.add(5, 10, dbus_interface = 'org.documentroot.Fisticuffs'))
资料来源:
改编自这里让 pyqt5 监听Ctl+C
和这里更新有关如何让 dbus-python 服务器在 python3 上的 PyQt5 主循环中运行的教程。