错误:[Errno 98] 地址已在使用中

Posted

技术标签:

【中文标题】错误:[Errno 98] 地址已在使用中【英文标题】:error: [Errno 98] Address already in use 【发布时间】:2015-06-04 01:25:50 【问题描述】:

我正在创建一个简单的flaskapp,我将在heroku 上部署它,这是第一次在heroku 上部署python 应用程序,说我是gunicorn 的新手。

附加说明:使用虚拟环境。

flask Flask 版本==0.10.1

gunicorn==19.3.0

使用“python run.py”有效

使用“工头启动”我收到以下错误

16:35:44 web.1  | started with pid 4047
16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4047] [INFO] Starting gunicorn 19.3.0
16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4047] [INFO] Listening at: http://0.0.0.0:5000 (4047)
16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4047] [INFO] Using worker: sync
16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4053] [INFO] Booting worker with pid: 4053
16:35:44 web.1  |  * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4053] [ERROR] Exception in worker process:
16:35:44 web.1  | Traceback (most recent call last):
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 507, in spawn_worker
16:35:44 web.1  |     worker.init_process()
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 118, in init_process
16:35:44 web.1  |     self.wsgi = self.app.wsgi()
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
16:35:44 web.1  |     self.callable = self.load()
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
16:35:44 web.1  |     return self.load_wsgiapp()
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
16:35:44 web.1  |     return util.import_app(self.app_uri)
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/util.py", line 355, in import_app
16:35:44 web.1  |     __import__(module)
16:35:44 web.1  |   File "/home/adminuser/Desktop/Github/SoftwareEng/barcodeServer/SoftwareEng/run.py", line 3, in <module>
16:35:44 web.1  |     flaskapp.run(debug=True)
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/flask/app.py", line 772, in run
16:35:44 web.1  |     run_simple(host, port, self, **options)
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/werkzeug/serving.py", line 617, in run_simple
16:35:44 web.1  |     test_socket.bind((hostname, port))
16:35:44 web.1  |   File "/usr/lib/python2.7/socket.py", line 224, in meth
16:35:44 web.1  |     return getattr(self._sock,name)(*args)
16:35:44 web.1  | error: [Errno 98] Address already in use
16:35:44 web.1  | Traceback (most recent call last):
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 507, in spawn_worker
16:35:44 web.1  |     worker.init_process()
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 118, in init_process
16:35:44 web.1  |     self.wsgi = self.app.wsgi()
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
16:35:44 web.1  |     self.callable = self.load()
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
16:35:44 web.1  |     return self.load_wsgiapp()
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
16:35:44 web.1  |     return util.import_app(self.app_uri)
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/gunicorn/util.py", line 355, in import_app
16:35:44 web.1  |     __import__(module)
16:35:44 web.1  |   File "/home/adminuser/Desktop/Github/SoftwareEng/barcodeServer/SoftwareEng/run.py", line 3, in <module>
16:35:44 web.1  |     flaskapp.run(debug=True)
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/flask/app.py", line 772, in run
16:35:44 web.1  |     run_simple(host, port, self, **options)
16:35:44 web.1  |   File "/home/adminuser/Desktop/test/SoftwareEng/local/lib/python2.7/site-packages/werkzeug/serving.py", line 617, in run_simple
16:35:44 web.1  |     test_socket.bind((hostname, port))
16:35:44 web.1  |   File "/usr/lib/python2.7/socket.py", line 224, in meth
16:35:44 web.1  |     return getattr(self._sock,name)(*args)
16:35:44 web.1  | error: [Errno 98] Address already in use
16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4053] [INFO] Worker exiting (pid: 4053)
16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4047] [INFO] Shutting down: Master
16:35:44 web.1  | [2015-03-30 16:35:44 +0000] [4047] [INFO] Reason: Worker failed to boot.
16:35:44 web.1  | exited with code 3
16:35:44 system | sending SIGTERM to all processes

过程文件

web: gunicorn run:flaskapp --log-file=-

文件结构

/
 ...
 run.py
 Procfile
 app/
    __init__.py
    routes.py
    ...

运行.py

from app import flaskapp
flaskapp.run(debug=True)

__init__.py

from flask import Flask

flaskapp = Flask(__name__)
from app import routes

routes.py

from app import flaskapp
from flask import render_template
import dbwrapper

@flaskapp.route('/')
@flaskapp.route('/home')
def index():
    return render_template('home.html')

从我读到的 gunicorn 允许创建多个线程,这让我认为线程正在尝试访问相同的端口,这会引发 已经在使用错误。但是我不知道如何解决它,任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

看起来您正在调用 run:flaskapp 而不是 app:flaskapp 并且 run.py 正在尝试打开另一个实例。

16:35:44 web.1  |   File "/home/adminuser/Desktop/Github/SoftwareEng/barcodeServer/SoftwareEng/run.py", line 3, in <module>

首先,始终封装运行:

if __name__ == '__main__':
    flaskapp.run(debug=True)

并更新您的 procfile 以改为调用 app.__init__.py

web: gunicorn app:flaskapp --log-file=-

PS:我不知道 procfile 或工头是什么——heroku 的东西?

【讨论】:

procfile 是一个文件,用于指定您想要运行的最佳命令here foreman 特定于我为 heroku 安装的工具带,它使用 procfile 来启动应用程序跨度> 想通了。如果建议的修复解决了这个问题,请告诉我。 我只需要添加 if _name_ == '_main_': 就可以了,非常感谢

以上是关于错误:[Errno 98] 地址已在使用中的主要内容,如果未能解决你的问题,请参考以下文章

Errno 98(地址已在使用中)Python Opencv

Python OSError:[Errno 98] 地址已在使用但未使用端口

Python [Errno 98] 地址已在使用中

OSError:[Errno 98] 地址“hashserve.sock”已在使用中”

socket.error: [Errno 48] 地址已在使用中

Ruby on Rails - 地址已在使用中 - 为“0.0.0.0”端口 3000 (Errno::EADDRINUSE) 绑定 (2)