假设我有一个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__.py
并仅加载somefile.py
文件中的表格会更有意义吗?
答案 0 :(得分:7)
由于您尚未在uWSGI中启用线程(请参阅:--enable-threads
,--threads
),因此此处没有进行Python线程处理(在Boto或其他情况下)。
我建议使用--lazy
,这会导致您的应用在每个工作人员后叉中加载。然后,您可以简单地依赖该行为来确保每个工作者都具有适当的连接/池/等。可以不受共享国家的关注。