не могу запустить функцию, потому что сигнал работает только в основном потоке основного интерпретатора?

Я пытаюсь создать API с помощью Flask. Если конечная точка /register/string:token получена и токен находится в определенном списке, должна быть выполнена функция register_user(username) . Эта функция отправляет команду на другой сервер по протоколу rcon. Однако, как только функция вызывается, я получаю следующую ошибку: ValueError: signal работает только в основном потоке основного интерпретатора . Как я могу решить проблему? Или как я могу запустить функцию в основном потоке?

Мой код выглядит примерно так (Примечание: скрипт отлично работает в Windows):

      from flask import Flask, send_file
from mcrcon import MCRcon as rcon

import configparser

api = Flask(__name__)


# @api.route('/register/<string:token>', methods=['GET'])
def register(token):
    cache = utils.load_cache()
    if token in list(cache['register_tokens'].keys()):
        utils.register_user(username=cache['register_tokens'][token]) # problem!
        del cache['register_tokens'][token]
        utils.update_cache(obj=cache)
        return {'status':'registration successful'}
    else:
        return {'status':'registration failed'}



class utils:
    @staticmethod
    def load_cache(file='../cache.pkl'):
        ...

    @staticmethod
    def update_cache(obj, file='../cache.pkl'):
        ...

    @staticmethod
    def clear_cache():
        ...

    @staticmethod
    def register_user(username):
        with rcon(config['global']['server_ip'], config['global']['server_rcon_secret']) as console:
            r = console.command(...)        
            console.disconnect()



if __name__ == '__main__':
    config = configparser.ConfigParser()
    config.read('../config.conf')

    if bool(config['discordbot.py']['enable'])==True:
        api.add_url_rule('/register/<string:token>', 'register', register)

    api.run(host=config['global']['server_ip'], debug=False, use_reloader=False)

0 ответов

Другие вопросы по тегам