python中tracer python微服務方案

2021-10-17 23:36:12 字數 3057 閱讀 5283

使用python做web開發面臨的乙個最大的問題就是效能,在解決c10k問題上顯的有點吃力。有些非同步框架tornado、twisted、gevent 等就是為了解決效能問題。這些框架在效能上有些提公升,但是也出現了各種古怪的問題難以解決。

在python3.6中,官方的非同步協程庫asyncio正式成為標準。在保留便捷性的同時對效能有了很大的提公升,已經出現許多的非同步框架使用asyncio。

使用較早的非同步框架是aiohttp,它提供了server端和client端,對asyncio做了很好的封裝。但是開發方式和最流行的微框架flask不同,flask開發簡單,輕量,高效。正是結合這些優點, 以sanic為基礎,整合多個流行的庫來搭建微服務。 sanic框架是和flask相似的非同步協程框架,簡單輕量,並且效能很高。本專案就是以sanic為基礎搭建的python微服務框架。(思想適用於其他語言)

微服務設計原則個人總結:

微服務總體架構:

使用sanic非同步框架,有較高的效能,但是使用不當會造成blocking, 對於有io請求的都要選用非同步庫。新增庫要慎重。sanic使用uvloop非同步驅動,uvloop基於libuv使用cython編寫,效能比nodejs還要高。
功能說明:

啟動前

queue = asyncio.queue()

reporter = aioreporter(queue=queue)

tracer = basictracer(recorder=reporter)

tracer.register_required_propagators()

opentracing.tracer = tracer

中介軟體

異常處理

對丟擲的異常進行處理,返回統一格式

任務

建立task消費queue中對span,用於日誌追蹤

非同步處理

由於使用的是非同步框架,可以將一些io請求並行處理

example:

asyncdefasync_request(datas):

# async handler request

results =awaitasyncio.gather(*[data[2]fordataindatas])

forindex, objinenumerate(results):

data = datas[index]

data[0][data[1]] = results[index]

@user_bp.get('/')@doc.summary("get user info")@doc.description("get user info by id")@doc.produces(users)asyncdefget_users_list(request, id):

asyncrecord =awaitcur.fetch(

""" select * from users where id = $1

python中 python中的 與

這一部分首先要理解python記憶體機制,python中萬物皆物件。對於不可變物件,改變了原來的值,其別名 變數名 繫結到了新值上面,id肯定會改變 對於可變物件,操作改變了值,id肯定會變,而 是本地操作,其值原地修改 對於 號操作,可變物件和不可變物件呼叫的都是 add 操作 對於 號操作,可變...

python中否定for 在python中否定函式

有沒有一種方法可以否定乙個函式,使它返回負數。在我的函式中,我有條件句,每個條件句都讓這個 烏龜 移動。有沒有一種方法可以否定這一點,所以烏龜的每乙個動作都是否定的。我說的是 狀況 在def ttinterpret program interpret program as a tinyturtle ...

python中雙重迴圈 加速Python中的雙迴圈

有沒有辦法加快從上一次迭代更新其值的雙迴圈?在 中 def calc n,m x 1.0 y 2.0 container np.zeros n,2 for i in range n for j in range m x np.random.gamma 3,1.0 y y 4 y np.random....