亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 multiprocess.Pool 同時運行 2 個瓶子應用程序

使用 multiprocess.Pool 同時運行 2 個瓶子應用程序

精慕HU 2021-09-14 17:23:41
我遇到了需要同時運行 2 個應用程序(在不同端口上)的情況。我知道這可能不是最好的想法/設計,但請耐心等待。主要問題bottle.run是阻塞。顯而易見的解決方法是使用multiprocessing.Pool,但我想這不是那么明顯。這有效(在 2 個不同的端口上運行相同的應用程序):from multiprocessing import Poolimport bottleapp = bottle.Bottle()@app.route('/')def index():    return 'hi'def run_app(port):    bottle.run(port=port)if __name__ == '__main__':    pool = Pool(2)    ps = [pool.apply_async(run_app, (port,))          for port in (8081, 8082)]    [p.get() for p in ps]  # YES, using a list comp for side-effect輸出是Bottle v0.12.15 server starting up (using WSGIRefServer())...Listening on http://127.0.0.1:8081/Hit Ctrl-C to quit.Bottle v0.12.15 server starting up (using WSGIRefServer())...Listening on http://127.0.0.1:8082/Hit Ctrl-C to quit.但是,嘗試使用 2 個不同的應用程序是行不通的。from multiprocessing import Poolimport bottleapp1 = bottle.Bottle()app2 = bottle.Bottle()apps = [app1, app2]@app1.route('/')def index_app1():    return 'app1'@app2.route('/')def index_app2():    return 'app2'def run_app(app, port):    bottle.run(app, port=port)if __name__ == '__main__':    pool = Pool(2)    ps = [pool.apply_async(run_app, (app, port))          for app, port in zip(apps, [8081, 8082])]    [p.get() for p in ps]這輸出Traceback (most recent call last):  File "test.py", line 29, in <module>    [p.get() for p in ps]  File "test.py", line 29, in <listcomp>    [p.get() for p in ps]  File "D:\Python37\Lib\multiprocessing\pool.py", line 657, in get    raise self._value  File "D:\Python37\Lib\multiprocessing\pool.py", line 431, in _handle_tasks    put(task)  File "D:\Python37\Lib\multiprocessing\connection.py", line 206, in send    self._send_bytes(_ForkingPickler.dumps(obj))  File "D:\Python37\Lib\multiprocessing\reduction.py", line 51, in dumps    cls(buf, protocol).dump(obj)AttributeError: Can't pickle local object 'ConfigDict.__init__.<locals>.<lambda>'更新將第一個示例更改為:...def run_app(app, port):    # instead of bottle.run(port=port) which uses default_app()    app.run(port=port) # or bottle.run(app=app, port=port)...也導致同樣的錯誤
查看完整描述

1 回答

  • 1 回答
  • 0 關注
  • 237 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號