2016-09-06 8 views
1

У меня есть 2 серверов в питоне, я хочу смешивать их в одном .py и работать вместе:Запуск несколько серверов в питоне в том же время (Threading)

server.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 е ile вместе. Если я попытаюсь запустить их из одного файла, любой из обоих стартов и другой запускается только тогда, когда первый из них работает.

Как я могу запустить 2 сервера в python вместе?

+0

Вы изучали резьбу? – MooingRawr

+0

Нет ... Я хочу помочь с потоками ... вот что я хотел сказать. – 9gagger

ответ

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) 

, если вам нужно передать аргументы в функции, которые вы можете сделать:

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.....)) 

В чем разница между потоками и потоками? Threading - это модуль более высокого уровня, чем поток, а в потоке 3.x переименован в _thread ... больше информации здесь: http://docs.python.org/library/threading.html, но это для другого вопроса, я думаю.

Итак, в вашем случае просто создайте функцию, которая запускает первый скрипт и второй скрипт, и просто запускает потоки для их запуска.

+0

Хорошо, я попробую это, спасибо большое. – 9gagger

+0

** И это сработало !! ** Спасибо, много уха. Армия дожей приветствует вас. – 9gagger

+0

такая шумиха, много wow – MooingRawr