下面是烧瓶应用模块:
@app.route('/service', methods=['POST'])
def service():
postData = request.data
try:
mgmt = src.connect();
src.execute(mgmt);
return "request completed"
except Exception, e:
return ("Exception occured" + str(e));
if __name__ == "__main__":
app.run(port=5050, debug=True, use_reloader=False)
#app.run(port=5050);
以下是连接模块:
def connect():
try:
config = ConfigParser.ConfigParser()
config.readfp(open(r'./config.ini'))
cipher_suite = Fernet(config.get('connection','token'))
decoded_pass = cipher_suite.decrypt(config.get('connection','hash'))
# Connect to the BIG-IP device.
mgmt = ManagementRoot(config.get('connection','ipaddr'),config.get('connection','user'),decoded_pass)
return mgmt;
except Exception as e:
l
log.error(e)
raise e;
我没有开始一个新的线程,但它抛出 ValueError:信号仅在主线程中工作,同时在下面的步骤中连接到BIG IP,如上所示
mgmt = ManagementRoot(config.get('connection','ipaddr'),config.get('connection','user'),decoded_pass)
我正在使用f5-sdk,其信号使用如下:
if HAS_SIGNAL:
signal.signal(SIGALRM, timeout_handler) ## this line throws the error
signal.alarm(int(self.args['timeout']))
response = connect.get(base_uri)
signal.alarm(0)
else:
response = connect.get(base_uri)
答案 0 :(得分:1)
是的,UNIX信号不能从主线程以外的线程设置。
看起来F5 SDK正在使用信号进行连接超时(这有点傻,但确实如此)。
您可以通过明确告知SDK在应用程序的早期setting the flag没有提供信号来解决此问题:
from f5 import bigip
bigip.HAS_SIGNAL = False # Override autodetection
当然,另一种解决方法是从主线程连接,但我认为这不是你想要做的事情,无论出于何种原因:)
答案 1 :(得分:0)
我已在我的烧瓶应用模块中添加了以下代码,而不是已注释的代码,以使其正常工作。
# if __name__ == "__main__":
# app.run(port=5050, debug=True, use_reloader=False)
if __name__ == "__main__":
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5050)
IOLoop.instance().start()