2012-07-24 17 views
2

說我有一個瓶的應用程序,使用多個進程,就像uWSGI服務:uWSGI +瓶+博託 - 線程安全

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

我的瓶的應用程序的組織是這樣的:

/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(你可能會猜測我對線程知之甚少......)?

或者,在__init__.py文件中調用connect_dynamodb()並僅加載somefile.py文件中的表是否更有意義?

回答

6

既然你還沒有uWSGI啓用的線程(參見:--enable-threads--threads)有沒有Python的線程怎麼回事

我會建議使用--lazy,這將導致你的應用程序(在博託或以其他方式)。被加載到每個工作人員後叉中。然後你可以簡單地依靠這種行爲來確保每個工人都有適當的連接/池/等。沒有共享狀態的擔憂。

+1

謝謝,尤其是對 - 懶惰的建議。 – 2012-08-03 21:59:18

+0

@CalebWright很高興我能幫上忙。 – 2012-08-19 06:05:53