我一直在使用server.py在本地機器上運行Tornado項目。當部署到服務器(例如Heroku)時,所有客戶端將共享一個server.py實例還是每個客戶端都有自己的運行版本?我想知道這是因爲我想在server.py中使用全局變量,並想知道它們是在所有客戶端還是僅在一個客戶端共享。在服務器上運行時,所有客戶端是否共享一個Python可執行文件?
回答
執行流程應該是相同的。看看下面的代碼: -
import tornado.ioloop
import tornado.web
print 'This is executed only once and global'
name = 'myname'
class MainHandler(tornado.web.RequestHandler):
print 'This is executed only once'
def get(self):
print 'This is executed for each requests'
self.write("Hello, world %s " % name)
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
時,我們會得到以下的輸出: -
$ ./bin/python server.py
This is executed only once and global
This is executed only once
This is executed for each requests
WARNING:tornado.access:404 GET /favicon.ico (::1) 0.52ms
This is executed for each requests
WARNING:tornado.access:404 GET /favicon.ico (::1) 0.25ms
這意味着類主體以外的代碼每當服務器啓動和任何狀態將被執行將保持在那裏直到重新啓動。當服務器啓動時,它還實例化類MainHandler
,並且對於每個傳入請求,將調用實例上的get
方法。這意味着類主體中的代碼也將被執行一次,並且只有方法get
中的代碼纔會獲得每個傳入請求的新狀態。我假設你的問題中的'客戶'是指傳入的Web請求。
一般在正常蟒WSGI應用中,方式來保持功能之間的一些共享狀態,而不會顯式地傳遞參數向下鏈是使用線程局部對象。我對龍捲風知之甚少,但從簡短的閱讀看來,它似乎並不在線程內運行,所以你必須查閱文檔以找出推薦的功能共享狀態。
每個客戶端都有自己的運行版本。當然。 如果您想要某種全局變量,您應該使用一些進程間通信工具(消息傳遞,同步,共享內存或rpc)。例如,Redis。當你在本地計算機上運行它
這是PHP風格的環境,但在Tornado中,一個進程將同時爲多個客戶端提供服務。 –
隨着龍捲風你必須每臺機器至少一個過程/ VM(Heroku上稱這些「DYNOS」);在多核環境中,您希望每臺計算機運行多個進程(每個核心一個進程)。每個進程處理許多用戶,所以在只有一個進程的簡單情況下,您可以使用全局變量共享用戶之間的狀態,但隨着您成長爲多個進程和進程,您需要進行某種進程間通信。
- 1. 客戶端上是否存在文件Python TCP服務器
- 2. 使用Java Spring,是否可以運行在客戶端執行的服務?
- 3. 在同一個文件中運行服務器和客戶端 - python
- 4. java服務器客戶端共享主
- 5. 是否有可能在執行客戶端代碼之前執行服務器端代碼在ASP.Net
- 6. Apache Commons是否可以在所有服務器上運行?
- 7. 是否可以在node.js服務器上設置運行(服務器端)的socket.io客戶端?
- 8. Silverlight是否在客戶端上運行
- 9. Java執行ipconfig,客戶端 - 服務器
- 10. 在共享文件服務器上運行pdftk
- 11. 是否可以與客戶共享vnc服務器的屏幕?
- 12. 在運行時將服務實例ID傳遞給客戶可執行文件
- 13. 如何使用Node.js在客戶端運行可執行文件?
- 14. 在服務器上運行python文件
- 15. 在iPhone上運行客戶端和服務器的客戶端 - 服務器Web應用程序 - 這可能嗎?
- 16. 如何使用cpanel在Godaddy共享服務器上運行python?
- 17. 在虛擬化服務器上運行時,可執行文件的行爲可能會有所不同嗎?
- 18. 運行一個可執行文件作爲服務器端「腳本」
- 19. 使用ANT運行一個服務器和兩個客戶端
- 20. 在不同的機器上運行客戶端和服務器
- 21. MongoDB的聚集引擎是否在服務器或客戶端上運行?
- 22. 在服務器上運行呈現並在客戶端上運行
- 23. 是否設置了在Eclipse中使用CXF生成Web服務客戶端所需的服務器運行時?
- 24. 在ASP中運行Word 2007時 - 它是服務器端還是客戶端?
- 25. 使用進程在客戶端服務器上執行utl_recomp
- 26. vb6在客戶端執行服務器上的exe
- 27. 從linux服務器運行.exe文件到Windows客戶端?
- 28. 如何從客戶端PC運行服務器EXE文件
- 29. cmake - 是否有可能在運行時將可執行文件與相對路徑鏈接到共享庫?
- 30. python:檢查一個可執行文件是否在路徑上?
該文件和過程是不同的東西。不同的進程可能共享相同的可執行文件,而不共享全局變量,stdin/out或其他全局狀態。 – user2357112