CherryPy 多線程應(yīng)用程序服務(wù)器

2023-12-30 23:06 更新

CherryPy是基于多線程概念設(shè)計(jì)的。 每次開發(fā)人員在CherryPy命名空間中獲取或設(shè)置值時(shí),都會(huì)在多線程環(huán)境中完成。

cherrypy.request和cherrypy.response都是線程數(shù)據(jù)容器,這意味著您的應(yīng)用程序通過(guò)知道在運(yùn)行時(shí)通過(guò)它們代理哪個(gè)請(qǐng)求來(lái)獨(dú)立地調(diào)用它們。

使用線程模式的應(yīng)用程序服務(wù)器不被高度重視,因?yàn)榫€程的使用被視為增加了由于同步要求而導(dǎo)致問(wèn)題的可能性。

其他選擇包括 -

Multi-process Pattern

每個(gè)請(qǐng)求都由自己的Python進(jìn)程處理。 在這里,可以認(rèn)為服務(wù)器的性能和穩(wěn)定性更好。

異步模式

在這里,接受新連接并將數(shù)據(jù)發(fā)送回客戶端是從請(qǐng)求過(guò)程異步完成的。 該技術(shù)以其效率而著稱。

URL調(diào)度

CherryPy社區(qū)希望更靈活,并且可以感謝調(diào)度員的其他解決方案。 CherryPy 3提供了其他內(nèi)置調(diào)度程序,并提供了一種編寫和使用自己的調(diào)度程序的簡(jiǎn)單方法。

  • 用于開發(fā)HTTP方法的應(yīng)用程序。 (GET,POST,PUT等)
  • 定義URL中路由的路由 - 路由調(diào)度程序

HTTP方法調(diào)度程序

在某些應(yīng)用程序中,URI與操作無(wú)關(guān),操作由資源上的服務(wù)器執(zhí)行。

例如, http://xyz.com/album/delete/10

URI包含客戶端希望執(zhí)行的操作。

默認(rèn)情況下,CherryPy調(diào)度程序?qū)⒁韵铝蟹绞接成?-

album.delete(12)

上面提到的調(diào)度員是正確提到的,但可以通過(guò)以下方式獨(dú)立 -

http://xyz.com/album/10

用戶可能想知道服務(wù)器如何調(diào)度確切的頁(yè)面。 此信息由HTTP請(qǐng)求本身承載。 當(dāng)有來(lái)自客戶端到服務(wù)器的請(qǐng)求時(shí),CherryPy看起來(lái)是最合適的處理程序,處理程序是URI所針對(duì)的資源的表示。

DELETE /album/12 HTTP/1.1

路線調(diào)度員

以下是調(diào)度所需方法的參數(shù)列表 -

  • name參數(shù)是要連接的路由的唯一名稱。
  • 路由是匹配URI的模式。
  • 控制器是包含頁(yè)面處理程序的實(shí)例。
  • 使用Routes調(diào)度程序連接與URI匹配的模式并關(guān)聯(lián)特定的頁(yè)面處理程序。

例子 (Example)

讓我們舉一個(gè)例子來(lái)了解它是如何工作的 -

import random
import string
import cherrypy
class StringMaker(object):
   @cherrypy.expose
   def index(self):
      return "Hello! How are you?"
   @cherrypy.expose
   def generate(self, length=9):
      return ''.join(random.sample(string.hexdigits, int(length)))
if __name__ == '__main__':

按照下面給出的步驟獲取上述代碼的輸出 -

Step 1 - 將上述文件另存為tutRoutes.py 。

Step 2 - 訪問(wèn)以下網(wǎng)址 -

http://localhost:8080/generate?length=10

Step 3 - 您將收到以下輸出 -

路線調(diào)度員


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)