【问题标题】:Run multiple servers in python at same time (Threading)同时在python中运行多个服务器(线程)
【发布时间】:2016-09-06 13:30:36
【问题描述】:

我在 python 中有 2 个服务器我想将它们混合在一个 .py 中并一起运行

服务器.py:

import logging, time, os, sys
from yowsup.layers import YowLayerEvent, YowParallelLayer
from yowsup.layers.auth import AuthError
from yowsup.layers.network import YowNetworkLayer
from yowsup.stacks.yowstack import YowStackBuilder

from layers.notifications.notification_layer import NotificationsLayer
from router import RouteLayer

class YowsupEchoStack(object):
    def __init__(self, credentials):
        "Creates the stacks of the Yowsup Server,"
        self.credentials = credentials
        stack_builder = YowStackBuilder().pushDefaultLayers(True)

        stack_builder.push(YowParallelLayer([RouteLayer, NotificationsLayer]))
        self.stack = stack_builder.build()
        self.stack.setCredentials(credentials)

    def start(self):
        self.stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT))
        try:
            logging.info("#" * 50)
            logging.info("\tServer started. Phone number: %s" % self.credentials[0])
            logging.info("#" * 50)
            self.stack.loop(timeout=0.5, discrete=0.5)
        except AuthError as e:
            logging.exception("Authentication Error: %s" % e.message)
            if "<xml-not-well-formed>" in str(e):
                os.execl(sys.executable, sys.executable, *sys.argv)
        except Exception as e:
            logging.exception("Unexpected Exception: %s" % e.message)

if __name__ == "__main__":
    import sys
    import config

    logging.basicConfig(stream=sys.stdout, level=config.logging_level, format=config.log_format)
    server = YowsupEchoStack(config.auth)
    while True:
        # In case of disconnect, keeps connecting...
        server.start()
        logging.info("Restarting..")

App.py:

import web

urls = (
  '/', 'index'
)

app = web.application(urls, globals())

class index:
    def GET(self):
        greeting = "Hello World"
        return greeting

if __name__ == "__main__":
    app.run()

我想从单个 .py 文件一起运行两者。 如果我尝试从一个文件运行它们,两者中的任何一个都会启动,而另一个只有在第一个文件完成工作时才会启动。

如何在 python 中同时运行 2 个服务器

【问题讨论】:

  • 你研究过线程吗?
  • 不...我需要线程方面的帮助...这就是我的意思。

标签: python python-2.7 web.py yowsup


【解决方案1】:
import thread

def run_app1():
    #something goes here

def run_app2():
    #something goes here


if __name__=='__main__':
    thread.start_new_thread(run_app1)
    thread.start_new_thread(run_app2)

如果您需要将 args 传递给您可以执行的函数:

thread.start_new_thread(run_app1, (arg1,arg2,....))

如果您想对线程进行更多控制,您可以这样做:

import threading
def app1():
    #something here

def app2():
    #something here

if __name__=='__main__':
    t1 = threading.Thread(target=app1)
    t2 = threading.Thread(target=app2)
    t1.start()
    t2.start()

如果你需要传递参数,你可以去:

t1 = threading.Thread(target=app1, args=(arg1,arg2,arg3.....))

线程与线程之间有什么区别?线程是比线程更高级别的模块,在 3.x 中,线程被重命名为 _thread... 更多信息:http://docs.python.org/library/threading.html 但我猜这是另一个问题。

因此,在您的情况下,只需创建一个运行第一个脚本和第二个脚本的函数,然后生成线程来运行它们。

【讨论】:

  • 它成功了!!非常感谢 woof woof。总督军向您致敬。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
相关资源
最近更新 更多