运行 多个服务器同时在 python 中(线程)
Run multiple servers in python at same time (Threading)
我在 python 中有 2 个服务器,我想将它们混合在一个 .py 和 运行 中:
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 文件一起。
如果我尝试从一个文件中 运行 它们, 两者中的任何一个都会启动,而另一个仅在第一个文件完成后才启动。
我如何 运行 2 个服务器 在 python 在一起?
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.....))
线程与线程之间有什么区别?线程是比线程更高级别的模块,在 3.x 中,线程已重命名为 _thread... 更多信息,请参见:http://docs.python.org/library/threading.html 但我想这是另一个问题。
因此,在您的情况下,只需创建一个 运行 第一个脚本和第二个脚本的函数,然后生成 运行 它们的线程。
我在 python 中有 2 个服务器,我想将它们混合在一个 .py 和 运行 中:
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 文件一起。 如果我尝试从一个文件中 运行 它们, 两者中的任何一个都会启动,而另一个仅在第一个文件完成后才启动。
我如何 运行 2 个服务器 在 python 在一起?
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.....))
线程与线程之间有什么区别?线程是比线程更高级别的模块,在 3.x 中,线程已重命名为 _thread... 更多信息,请参见:http://docs.python.org/library/threading.html 但我想这是另一个问题。
因此,在您的情况下,只需创建一个 运行 第一个脚本和第二个脚本的函数,然后生成 运行 它们的线程。