uwsgi使用經驗, uwsgi異步任務

1. nginx 報 readv() failed 

uwsgi+nginx搭建的server,發現當用post請求時,會返回數據超時。查了一下nginx中的error.log:

[error] 16833#0: *158 readv() failed (104: Connection reset by peer) while reading upstream, client: 10.20.138.44, server: my.cn, request: "POST /openapi/auth/Login HTTP/1.1", upstream: "uwsgi://127.0.0.1:8001", host: "my.cn"

uwsgi中是接收到請求並正常處理的。但ngx報錯,client那邊不能正常接收返回。


網上說解決方案是加上post-buffering=4096,即指定post-buffering參數。

參考鏈接說明,http://simple-is-better.com/news/301,此文章還提到post-buffering-bufsize參數。

但,他沒說明白post-buffering與post-buffering-bufsize參數的關係,即如果第二設置爲64k,第一個post-buffering是不是應該要比64k更大。

因爲按我理解,bufsize是讀post數據,然後寫到post-buffering中,post-buffering不夠POST的body大時,就會寫文件。

所以,最終我配置是:

post-buffering=131072 # 128K
post-buffering-busize=65536 # 64K

問題解決。


2. uwsgi也支持異步任務與定時任務等。

使用詳情參看官方文檔兩篇文章 --> 

http://uwsgi-docs.readthedocs.org/en/latest/PythonDecorators.html

http://uwsgi-docs.readthedocs.org/en/latest/Spooler.html


說下注意點:

1).使用例子中的timer裝飾器,感覺任務沒跑起來,沒成功輸出 print到uwsgi指定的log文件。

2)最後使用rbtimer成功輸出log。誰知道原因可以告訴下我。所以我們項目中還是使用rbtimer代替timer。

3)文檔裏說uwsgi.spooler 比較弱,相對celery來說。 應該是指celery所包含豐富功能:分佈式、重試、優先級、任務持久化、結果持久化等。

    但,簡單功能應用,spooler足夠了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章