一个脚本可以在几个服务器上运行,如何在Python中从同一个脚本运行两个服务器...

我正在构建一个解决方案,它依赖于来自现场物联网设备的发布/订阅事件来启动一些处理。出于我的目的,我使用flaskas来运行我的主应用程序。然后运行mqtt客户机连接到mqtt服务器并侦听事件。在

当我打开主瓶的时候应用程序副本它使用python app.py同时启动Flask服务和MQTT客户机。但是,当我尝试使用gunicorn运行时,它只启动Flask服务,而不启动MQTT客户机。在

我可以使用什么生产级服务(如果不是gunicorn)来运行这两个服务,以及如何使用它?在import logging, json, requests, os

import paho.mqtt.client as mqtt

from flask import Flask, request, url_for

from flask_restful import reqparse, abort, Api, Resource

from logging.handlers import SysLogHandler

from logging import StreamHandler

from flask.ext.superadmin import Admin, BaseView, model

from redis import Redis

from rq import Queue

from task import Task

from dateutil.relativedelta import relativedelta

from datetime import datetime, date

..

..

from commons import db, bootstrap

app = Flask(__name__)

api = Api(app)

bootstrap.bootstrap_app(app)

#Setup (Redis) Queue store

q = Queue(connection=Redis())

#Intialize task instance

task = Task(app)

..

...

@app.before_request

def log_request_info():

app.logger.debug('Headers: %s', request.headers)

app.logger.debug('Body: %s', request.get_data())

#API resource routing

api.add_resource(Test, '/test')

def session_report(client, userdata, message):

print message.topic, message.payload

# Redirect to session_report endpoint

with app.test_request_context():

url = 'http://localhost:5000'+url_for('sessionreport', _external=False)

headers = {'content-type': 'application/json'}

response = requests.request("POST", url, data=message.payload,

headers=headers)

def process_ack(client, userdata, message):

try:

user = User()

user.update_account(account_number=next(iter(json.loads(message.payload))))

except Exception, e:

print e

def publish_accounts(client):

user_obj = User()

users = {user.id: user.account_number for user in user_obj.get_users()}

client.publish('accounts', payload=json.dumps(users), qos=1, retain=True)

# paho callbacks

def on_connect(client, userdata, flags, rc):

print "CONNECTED!", str(rc)

# Subscribe to topis(s) here

client.subscribe("mine/#")

client.subscribe("session/#")

client.subscribe("ack")

# Add callbacks to subscribed topics

client.message_callback_add("session/#", session_report)

client.message_callback_add("ack", process_ack)

# Publish latest list of accounts

publish_accounts(client)

def on_subscribe(client, userdata, mid, granted_qos):

print "Subscribed: ", str(mid), str(granted_qos)

def on_message(client, userdata, msg):

print msg.topic, msg.payload

def on_publish(client, userdata, mid):

print "PUBLISHED!"

app.logger.info('PUBLISHED : {} -- {}'.format(mid, userdata))

if __name__ == '__main__':

handler = StreamHandler() #SysLogHandler()

handler.setLevel(logging.DEBUG)

app.logger.addHandler(handler)

client = mqtt.Client()

client.on_connect = on_connect

client.on_subscribe = on_subscribe

client.on_message = on_message

client.connect("localhost", 1883, 60)

client.loop_start()

app.run(debug=True, host='0.0.0.0', port=5000)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值