3

假设我有一个 Flask 应用程序,由 uWSGI 使用多个进程提供服务,例如:

uwsgi --socket 127.0.0.1:3031 --file flaskapp.py --callable app --processes 4

我的 Flask 应用程序是这样组织的:

/flaskapp
    app.py
    /db
        __init__.py
        somefile.py
        somefile2.py
        ...

我正在使用 boto 连接到 DynamoDB。该__init__.py文件是空的,每个somefilexxx.py文件的开头是这样的:

db = boto.connect_dynamodb()
table = db.get_table('table')
def do_stuff_with_table():

我不在应用程序中使用线程,并且我不认为 uWSGI 使用线程,除非我明确地使用--threads. 这个设置有意义吗?使用 urllib 是否有任何线程问题我必须担心(你可能会猜我对线程知之甚少......)?

或者,调用文件并仅加载文件中的表connect_dynamodb()是否更有意义?__init__.pysomefile.py

4

1 回答 1

7

由于您尚未在 uWSGI 中启用线程(请参阅:--enable-threads--threads),因此此处没有 Python 线程(在 Boto 或其他方式中。)

我建议使用--lazy,这将导致您的应用程序加载到每个工人后叉中。然后,您可以简单地依靠该行为来确保每个工作人员都有适当的连接/池/等。无需担心共享状态即可使用。

于 2012-07-26T09:48:29.443 回答