Python一些可能用的到的函數系列130 UCS-Time Brick

說明

UCS對象是基于GFGoLite進行封裝,且側重于實現UCS規范。

內容

1 函數

我發現pydantic真是一個特別好用的東西,可以確保在數據傳遞時的可靠,以及對某個數據模型的描述。

以下,UCS給出了id、time相關的brick映射,并給出了時間到字符的轉換。其方便之處在于,本地幾乎不需要管怎么實現的,只要有服務支持即可。效率也足夠高。

from typing import List, Optional
from pydantic import BaseModelimport requests as req 
class UCS(BaseModel):__version__ =1.1gfgo_lite_server: str = 'http://172.17.0.1:24090/'def get_brick_name(self, some_id = None):some_dict = {}some_dict['rec_id'] = some_idurl = self.gfgo_lite_server + 'get_brick_name/'res = req.post(url, json = some_dict).json()return res def get_brick_name_s(self, some_id_list = None):some_dict = {}some_dict['rec_id_list'] = some_id_listurl = self.gfgo_lite_server + 'get_brick_name_s/'res = req.post(url, json = some_dict).json()return res def gfgo(self, kwargs = None, pack_func = None):url = self.gfgo_lite_server + 'gfgo/'return req.post(url, json = {'kwargs':kwargs,'pack_func':pack_func}).json()def dt_str2num(self, some_dt_str = None):some_dict = {}some_dict['some_dt_str'] = some_dt_strurl = self.gfgo_lite_server + 'str2num/'res = req.post(url, json = some_dict).json()return  resdef dt_str2num_s(self, some_dt_str_list = None):some_dict = {}some_dict['some_dt_str_list'] = some_dt_str_listurl = self.gfgo_lite_server + 'str2num_s/'res = req.post(url, json = some_dict).json()return  res# 時間名稱def get_time_brick_name(self, dt_str_or_ts = None):some_dict = {}some_dict['dt_str_or_ts'] = dt_str_or_tsurl = self.gfgo_lite_server + 'get_time_brick_name/'res = req.post(url, json = some_dict).json()return res def get_time_brick_name_s(self, dt_str_or_ts_list = None):some_dict = {}some_dict['dt_str_or_ts_list'] = dt_str_or_ts_listurl = self.gfgo_lite_server + 'get_time_brick_name_s/'res = req.post(url, json = some_dict).json()return res # 1.1 >>>def get_brick_list(self, start_brick_name = None, end_brick_name = None):some_dict = {}some_dict['start_brick_name'] = start_brick_namesome_dict['end_brick_name'] = end_brick_nameurl = self.gfgo_lite_server + 'get_brick_list/'res = req.post(url, json = some_dict).json()return res def get_brick_bounds(self, brick_name = None):some_dict = {}some_dict['brick_name'] = brick_nameurl = self.gfgo_lite_server + 'get_brick_bounds/'res = req.post(url, json = some_dict).json()return res # 1.2 >>> 時間# get_time_brick_bounds_s - 待def get_time_brick_bounds_s(self, brick_name_list = None, char_or_num = 'char'):some_dict = {}some_dict['brick_name_list'] = brick_name_listsome_dict['char_or_num'] = char_or_numurl = self.gfgo_lite_server + 'get_time_brick_bounds_s/'res = req.post(url, json = some_dict).json()return res # get_time_brick_listdef get_time_brick_list(self,start_brick_name = None, end_brick_name = None):some_dict = {}some_dict['start_brick_name'] = start_brick_namesome_dict['end_brick_name'] = end_brick_nameurl = self.gfgo_lite_server + 'get_time_brick_list/'res = req.post(url, json = some_dict).json()return res 

2 應用

2.1 時間轉換

ucs = UCS(gfgo_lite_server = 'http://xxx:24090/')
ucs.dt_str2num('2024-01-31 11:11:11')
1706670671ucs.dt_str2num_s(['2024-01-31 11:11:11','2024-02-01 11:11:11' ])
[1706670671, 1706757071]

反函數可以用get_time_str1

In [19]: get_time_str1(1706670671)
Out[19]: '2024-01-31 11:11:11'

2.2 UCS-time

一個簡單的應用如下:我需要制定一個靜態數據同步計劃,計劃需要隨著時間軸,按照時間塊熟順序向前推進。具體來說,這個對于數據庫遷移(合并)與回測都有關系。

tbrick1 = ucs.get_time_brick_name('2024-01-31 11:11:11')
'2024.01.31.11'
tbrick2 = ucs.get_time_brick_name('2024-02-10 11:11:11')
'2024.02.10.11'tbrick_list = ucs.get_time_brick_list(start_brick_name = tbrick1, end_brick_name = tbrick2)
['2024.01.31.11', '2024.01.31.12', '2024.01.31.13', ...]ucs.get_time_brick_bounds_s(tbrick_list[:3])
[['2024-01-31 11:00:00', '2024-01-31 12:00:00'],['2024-01-31 12:00:00', '2024-01-31 13:00:00'],['2024-01-31 13:00:00', '2024-01-31 14:00:00']]

btw, 在探索完UCS-time之后,我發現大約因為時間觀念比較深入人心,其實是可以更自由的轉換的,

# 將一般字符串轉為UCS 名稱
def dt_str2ucs_blockname(some_dt_str):some_dt_str1   =some_dt_str.replace('-','.').replace(' ','.').replace(':','.')return '.'.join(some_dt_str1.split('.')[:4])'''
dt_str2ucs_blockname('2024-06-24 09:30:00')
'2024.06.24.09'
'''

這些函數也被納入基礎函數,有時候可以起到輔助的作用,特別在使用GFGolite不那么方便的時候。

一個更具體的場景,我覺得是具有通用性的,描述如下:

  • 1 數據沒有順序id,但是具備入庫時間(create_time)
  • 2 數據入庫時間是不連續的,有一些時間段密集,更多的時間可能空閑,但也并不是一條沒有。
  • 3 每次執行時,worker總是能夠有效推進一個brick

具體做法:

p01: 將需要的時間塊按序持久化為本地文件,并將對應的bounds作為字典

p02: 獲取當前時間的時間塊

# 將標準時間字符串轉為brick
def timestr2timeblock(some_time_str = None):x1 = some_time_str.replace('-','.').replace(' ','.').replace(':','.')return '.'.join(x1.split('.')[:4])the_time_now = get_time_str1()
the_time_brick = timestr2timeblock(the_time_now)

p03:從gb中獲取上一次處理過的最新brick,并鎖定在時間軸的位置。


worker_buffer_space = 'sp_worker.general'
tier1 = 'some_tier'
tier2 = 'ucs_time_brick_ordered.sniffer'
prefix = '.'.join([worker_buffer_space,tier1,tier2]) +'.'# ==========================  Load
time_brick_list = from_pickle('time_brick_list')
time_bounds_dict = from_pickle('time_bounds_dict')
gb = GlobalBuffer()
watch_brick_pos = time_brick_list.index(the_time_brick)

p04:按照已處理之后,當前觀察時間之前的原則,選出available_time_brick_list

latest_data_brick = gb.getx(prefix +'last_brick_handled')
if latest_data_brick is None:start_pos = 0
else:start_pos =  time_brick_list.index(latest_data_brick)available_time_brick_list = time_brick_list[start_pos+1:watch_brick_pos]

p05:按順序遍歷時間塊,直到處理到一個有效的brick才中斷本次循環

# cur_data_brick = available_time_brick_list[0]
for cur_data_brick in available_time_brick_list:print(cur_data_brick)cur_bound = time_bounds_dict[cur_data_brick]print(cur_bound)resp = 【獲取待處理數據】if len(resp):res_df = pd.DataFrame(resp, columns = keep_cols)if ok_to_handle:【將結果分批刪除】listofdict2 = slice_list_by_batch2(xxx.to_dict(orient='records'), 1000)for some_listofdict in listofdict2:【更新已處理塊信息】gb.setx(prefix +'last_brick_handled',cur_data_brick, persist=True)break

通過循環或者定時任務喚起這樣的worker就可以。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41562.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41562.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41562.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【分布式系統五】監控平臺Zabbix實際監控運用(命令+截圖詳細版)

目錄 一.Zabbix 監控 Windows 1.安裝zabbix 2.Web 頁面添加主機,關聯模板 二.Zabbix 監控 Java 應用 1.安裝tomcat 2.服務端安裝 zabbix-java-gateway 3.Web 頁面添加主機,關聯模板 三.Zabbix 監控 SNMP 1.服務端安裝 snmp 監控程序 2.修改 sn…

RT-Thread和freeRTOS啟動流程

一. freeRTOS啟動流程 二. RT-Thread啟動流程 因為RT-Thread中我們定義了補丁函數也叫做鉤子函數--$Sub$$main()--作為一個新功能函數,可以將原有函數劫持下來,并在之后的程序運行中加上$Super $ $前綴來重新調用原始函數。 所以啟動流程是$Sub$$main(…

Chiasmodon:一款針對域名安全的公開資源情報OSINT工具

關于Chiasmodon Chiasmodon是一款針對域名安全的公開資源情報OSINT工具,該工具可以幫助廣大研究人員從各種來源收集目標域名的相關信息,并根據域名、Google Play應用程序、電子郵件地址、IP地址、組織和URL等信息進行有針對性的數據收集。 該工具可以提…

利用node連接mongodb實現一個小型后端服務系統demo

http 請求 實現get請求數據庫數據;實現添加數據實現編輯數據實現刪除數據實現導出txt文件、Excel文件實現查詢數據庫數據并利用導出為excel文件 node 版本 16.16.0 node 版本 18.16.0 會連接 MongoDB 數據庫錯誤。 Connected to MongoDB failed MongoServerSele…

Nginx-簡介

介紹 nginx是一款HTTP和反向代理服務器、郵件代理服務器和通用TCP/IP代理服務器,在俄羅斯廣泛使用,用于代理高負載站點。 版本 nginx開源版nginx plus企業版openresty將nginx和lua腳本結合 tengine更穩定、高性能 正向代理 客戶端和代理服務是一伙的…

【vue動態組件】VUE使用component :is 實現在多個組件間來回切換

VUE使用component :is 實現在多個組件間來回切換 component :is 動態父子組件傳值 相關代碼實現&#xff1a; <component:is"vuecomponent"></component>import componentA from xxx; import componentB from xxx; import componentC from xxx;switch(…

生產力工具|viso常用常見科學素材包

一、科學插圖素材網站 一圖勝千言&#xff0c;想要使自己的論文或重要匯報更加引人入勝&#xff1f;不妨考慮利用各類示意圖和科學插圖來輔助研究工作。特別是對于新手或者繁忙的科研人員而言&#xff0c;利用免費的在線科學插圖素材庫&#xff0c;能夠極大地節省時間和精力。 …

Python字符編碼檢測利器: chardet庫詳解

Python字符編碼檢測利器: chardet庫詳解 1. chardet簡介2. 安裝3. 基本使用3.1 檢測字符串編碼3.2 檢測文件編碼 4. 高級功能4.1 使用UniversalDetector4.2 自定義編碼檢測 5. 實際應用示例5.1 批量處理文件編碼5.2 自動轉換文件編碼 6. 性能優化7. 注意事項和局限性8. 總結 在…

【代碼隨想錄】【算法訓練營】【第58天】 [卡碼110]字符串接龍 [卡碼105]有向圖的完全可達性 [卡碼106]島嶼的周長

前言 思路及算法思維&#xff0c;指路 代碼隨想錄。 題目來自 卡碼網。 day 59&#xff0c;周五&#xff0c;繼續ding~ 題目詳情 [卡碼110] 字符串接龍 題目描述 卡碼110 字符串接龍 解題思路 前提&#xff1a; 思路&#xff1a; 重點&#xff1a; 代碼實現 C語言 […

Jackson庫使用教程

1. Jackson概述 定義: Jackson是一個基于Java的開源JSON解析工具&#xff0c;用于Java對象與JSON數據的互相轉換。示例JSON:{"author": "一路向北_Coding","age": 20,"hobbies": ["coding", "leetcode", "r…

昇思25天學習打卡營第13天|linchenfengxue

Diffusion擴散模型 關于擴散模型&#xff08;Diffusion Models&#xff09;有很多種理解&#xff0c;本文的介紹是基于denoising diffusion probabilistic model &#xff08;DDPM&#xff09;&#xff0c;DDPM已經在&#xff08;無&#xff09;條件圖像/音頻/視頻生成領域取得…

小蜜蜂WMS與小蜜蜂WMS對接集成根據條件獲取客戶信息列表(分頁)連通新增客戶信息(小蜜蜂讀寫測試)

小蜜蜂WMS與小蜜蜂WMS對接集成根據條件獲取客戶信息列表&#xff08;分頁&#xff09;連通新增客戶信息(小蜜蜂讀寫測試) 接通系統&#xff1a;小蜜蜂WMS 天津市小蜜蜂計算機技術有限公司&#xff08;acbee&#xff0c;TianJinACBEEComputerTechnologyCo.,Ltd&#xff09;成立于…

基于圖像處理的滑塊驗證碼匹配技術

滑塊驗證碼是一種常見的驗證碼形式&#xff0c;通過拖動滑塊與背景圖像中的缺口進行匹配&#xff0c;驗證用戶是否為真人。本文將詳細介紹基于圖像處理的滑塊驗證碼匹配技術&#xff0c;并提供優化代碼以提高滑塊位置偏移量的準確度&#xff0c;尤其是在背景圖滑塊陰影較淺的情…

上海市計算機學會競賽平臺2023年2月月賽丙組平分數字(一)

題目描述 給定 &#x1d45b;n 個整數&#xff1a;&#x1d44e;1,&#x1d44e;2,??,&#x1d44e;&#x1d45b;a1?,a2?,?,an?&#xff0c;請判定能否將它們分成兩個部分&#xff08;不得丟棄任何數字&#xff09;&#xff0c;每部分的數字之和一樣大。 輸入格式 第…

模擬,CF 570C - Replacement

一、題目 1、題目描述 2、輸入輸出 2.1輸入 2.2輸出 3、原題鏈接 570C - Replacement 二、解題報告 1、思路分析 1、長為cnt的連續串的最小操作次數為cnt - 1 2、每次將一個非. 替換為. f要么增加1要么增加2 只有前后都是 . 的時候會增加2 同理&#xff0c;當我們將一…

STM32外擴SRAM及用法

一.概述 一般單片機有片內的RAM&#xff0c;但都不多&#xff0c;比如&#xff1a;STM32F407ZGT6 自帶了 192K 字節的 RAM&#xff0c;對一般應用來說&#xff0c;已經足夠了&#xff0c;不過在一些對內存要求高的場合&#xff0c;比如做華麗效果的 GUI&#xff0c;處理大量數據…

swagger的接口文檔導入到yapi上

一、訪問swagger接口 swagger集成到項目后&#xff0c;通過http:\\ip:port/swagger-ui.html 訪問。 說明&#xff1a;這里的路徑是基于swagger2。如果用swagger3&#xff0c;需要用swagger3的路徑進行訪問。 訪問如圖&#xff1a; 這就是swagger接口首頁。如果想導入到yapi上…

module_param_named 內核啟動時模塊參數實現原理

基于上節內核啟動參數實現原理內容, 其中對early_param的實現流程做了分析, 已基本清晰. 但有不少的參數是在內核模塊中聲明的, 具體賦值流程也值得一探究竟. nomodeset 裝過Linux系統的同學可能多少有看到過nomodeset這個參數, 解決一些顯卡點不亮Linux的問題. 那么這個nomo…

AI繪畫Stable Diffusion 新手入門教程:萬字長文解析Lora模型的使用,快速上手Lora模型!

大家好&#xff0c;我是設計師阿威 今天給大家講解一下AI繪畫Stable Diffusion 中的一個重要模型—Lora模型&#xff0c;如果還有小伙伴沒有SD安裝包的&#xff0c;可以看我往期入門教程2024最新超強AI繪畫Stable Diffusion整合包安裝教程&#xff0c;零基礎入門必備&#xff…

React Hooks --- 分享自己開發中常用的自定義的Hooks (1)

為什么要使用自定義 Hooks 自定義 Hooks 是 React 中一種復用邏輯的機制&#xff0c;通過它們可以抽離組件中的邏輯&#xff0c;使代碼更加簡潔、易讀、易維護。它們可以在多個組件中復用相同的邏輯&#xff0c;減少重復代碼。 1、useThrottle 代碼 import React,{ useRef,…