uWSGI + Flask + boto - 线程安全

Cal*_*ght 3 python boto flask uwsgi

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

uwsgi --socket 127.0.0.1:3031 --file flaskapp.py --callable app --processes 4
Run Code Online (Sandbox Code Playgroud)

我的Flask应用程序组织如下:

/flaskapp
    app.py
    /db
        __init__.py
        somefile.py
        somefile2.py
        ...
Run Code Online (Sandbox Code Playgroud)

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

db = boto.connect_dynamodb()
table = db.get_table('table')
def do_stuff_with_table():
Run Code Online (Sandbox Code Playgroud)

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

或者,它会更有意义调用connect_dynamodb()__init__.py的文件,并只加载在表somefile.py文件?

mh.*_*mh. 7

由于你没有在uWSGI中启用线程(参见:--enable-threads,--threads),所以这里没有Python线程(在Boto或其他方面).

我建议使用--lazy,这将导致您的应用程序在每个工作人员后叉加载.然后,您可以简单地依赖该行为来确保每个工作者都具有适当的连接/池/等.可以不受共享状态的影响.