Я хочу запустить сервер python -os c одновременно с app.timer в сценарии python. Проблема в том, что я могу заставить сервер и таймер работать отдельно, но не вместе. Отображения диспетчера содержатся во внешнем конфигурационном файле, и это, кажется, работает нормально. Кажется, что-то в работающем сервере нарушает таймер. Интересно, может ли какая-нибудь добрая душа помочь? Любые предложения будут приветствоваться. Спасибо заранее ... Это тестовая установка:
def DataPathsImport():
print("Reading in config data...")
with open("/Users/<path_to_config_file>/linker_config.yaml", 'r') as y:
dlinks = (yaml.load(y, Loader=yaml.SafeLoader))
def print_hello():
print("hello")
return 1.0
class OSC_Server(bpy.types.Operator):
"""Set up server"""
bl_idname = "wm.osc_server_operator"
bl_label = "OSCMainThread"
count= 0
def execute(self, context):
global _report
try:
self.dispatcher = dispatcher.Dispatcher()
links = DataPathsImport()
for link in links:
dataTuple = (link.get('tag'), link.get('dpath'), link.get('dtype'), \
link.get('action'))
self.dispatcher.map(link.get('addr'), osc_callback_router, dataTuple)
except: # be specific with error type
print(f"There has been an error when assigning address: {link.get('addr')}")
try:
print(f"Creating server on port: {port}, at ip address: {ip}")
self.server = BlockingOSCUDPServer((ip, port), self.dispatcher)
self.server_thread = threading.Thread(target=self.server.serve_forever())
self.server_thread.start()
bpy.app.timers.register(print_hello)
except OSError as err:
_report[1] = err
return {'CANCELLED'}
def cancel(self, context):
print("OSC server.shutdown()")
self.server.shutdown()
return {'CANCELLED'}
classes = {
OSC_Server
}
def register():
from bpy.utils import register_class
for cls in classes:
register_class(cls)
def unregister():
from bpy.utils import unregister_class
for cls in reversed(classes): # unregister classes in the reverse order that they were registered
unregister_class(cls)
if __name__ == "__main__":
register()
bpy.ops.wm.osc_server_operator()