1.檢查檔案是否存在
我們經常需要從檔案中讀取資料或向其中寫入資料,但要做到這一點,我們需要檢查檔案是否存在,
import os exists = os.path.isfile('/path/to/file')
2.讀取CSV檔案
import csv csv_mapping_list = [] with open("/path/to/data.csv") as my_data: csv_reader = csv.reader(my_data, delimiter=",") line_count = 0 for line in csv_reader: if line_count == 0: header = line else: row_dict = {key: value for key, value in zip(header, line)} csv_mapping_list.append(row_dict) line_count += 1
3.SQLAlchemy
SQLAlchemy是Python編程語言下的一款ORM框架,該框架建立在資料庫API之上,使用關系物件映射進行資料庫操作,簡言之便是:將物件轉換成SQL,然后使用資料API執行SQL并獲取執行結果,
關于ORM:
全稱Object Relational Mapping(物件關系映射),
特點是操縱Python物件而不是SQL查詢,也就是在代碼層面考慮的是物件,而不是SQL,體現的是一種程式化思維,這樣使得Python程式更加簡潔易讀,
具體的實作方式是將資料庫表轉換為Python類,其中資料列作為屬性,資料庫操作作為方法,優點是(1)簡潔易讀:將資料表抽象為物件(資料模型),更直觀易讀;(2)可移植:封裝了多種資料庫引擎,面對多個資料庫,操作基本一致,代碼易維護;(3)更安全:有效避免SQL注入,
4.Flask-RESTful 引數決議
Flask-RESTful 內置了支持驗證請求資料,它使用了一個argparse 的庫,
from flask.ext.restful import reqparse
##定義決議器 parser = reqparse.RequestParser()
##添加規則,如果是必填項,還可以添加 required =true定義是否必填,通過location=['form','args'...]定義作用域 parser.add_argument('rate', type=int, help='Rate to charge for this resource')
##引數 args = parser.parse_args()
##獲取指定的引數
key-name-values = args.get('XXX')
help--定義了報錯時的提示資訊,
5.資料格式化
Flask-RESTful 提供了 fields 模塊和 marshal_with() 裝飾器,類似 Django ORM 和 WTForm,可以使用 fields 模塊來回應中格式化結構,
flask.ext.restful.marshal_with(fields, envelope=None)
A decorator that apply marshalling to the return values of your methods.
主要是解決以下報錯:
TypeError:Object of type XXXX is not JSON serialzable.
匯入模塊的方式;
from flask.ext.restful import fields, marshal_with
案例
from collections import OrderedDict from flask.ext.restful import fields, marshal_with
###一定是字典結構 resource_fields = { 'task': fields.String, 'uri': fields.Url('todo_ep') } class TodoDao(object): def __init__(self, todo_id, task): self.todo_id = todo_id self.task = task # This field will not be sent in the response self.status = 'active' class Todo(Resource): @marshal_with(resource_fields) def get(self, **kwargs): return TodoDao(todo_id='my_todo', task='Remember the milk')
此外,fields.Nested(),fields.List()也是常用從方法,
6.Python實作多任務
行程>執行緒>協程
主行程:執行的時候,默認的行程稱作主行程;子行程,在主行程中可以開啟子行程,
multiprocessing模塊提供了類似threading模塊的介面,并對行程的各種操作進行了良好的封裝,提供了各種行程間通信的介面例如Pipe, Queue等等,可以實作行程間的通信,同步等操作,
import time
from multiprocessing import Process
# 創建子行程p = Process(target=run, args=("Ail",)) # target行程執行的任務/函式, args傳引數,可選,可迭代(元組)
#啟動行程p.start()
7.行程ID
import os
os.getpid() ##當前行程ID
os.getppid() ##獲取當前行程的父行程的id
8.全域變數在多個行程中不能共享
在子行程中修改全域變數對父行程中的全域變數沒有影響,因為父行程在創建子行程時對全域變數做了一個備份,父行程中的全域變數與子行程的全域變數完全是不同的兩個變數,全域變數在多個行程中不能共享,
即:如果是全域變數,則每個行程都會擁有一份全域變數,各自操作各自的全域變數,
9.行程join方法
有時候會需要父行程等待子行程結束再執行父行程后面的代碼,此時可以考慮使用join()方法,
例子如下:
import time from multiprocessing import Process import os def run(): print("子行程開啟") time.sleep(2) print("子行程結束") if __name__ == "__main__": print("父行程啟動") p = Process(target=run) p.start() p.join() # 等待子行程結束后,再往下執行 print("父行程結束") # 輸出結果 父行程啟動 子行程開啟 子行程結束 父行程結束
jion()也可以理解為阻塞主行程,此處后面的代碼,主行程暫不執行,它可以設定timeout,
10.多行程process的常用方法
(1) start():啟動子行程實體(創建子行程);
(2) is_alive():判斷子行程是否還在活著;如果任務完成,則false;
(3) join([timeout]):是否等待子行程執行結束,或等待多少秒;
(4) terminate():不管任務是否完成,立即終止子行程;
(5) close() :關閉 Process 物件,釋放與之關聯的所有資源,如果底層行程仍在運行,則會引發 ValueError ,注意,如果資源釋放后(已呼叫colse()),再執行 is_alive()會報錯,
11.行程池
如果要啟動大量的子行程,可以用行程池的方式批量創建子行程,
from multiprocessing.pool import Pool
# 創建多個行程,表示可以同時執行的行程數量,默認大小是CPU的核心數
p = Pool(8)
# 創建行程,放入行程池統一管理 p.apply_async(funcation-name, funcation-args=(???,)) ###非阻塞式;還可以添加回呼函式,此外還有一種阻塞式:p.apply()--注意:(1)阻塞式,行程池中一個任務
完成之后,才能開始下一個任務;(2)這個沒有回呼函式引數,
# 如果我們用的是行程池,在呼叫join()之前必須要先close(),并且在close()之后不能再繼續往行程池添加新的行程(即停止添加任務)
p.close()
# 行程池物件呼叫join,會等待行程吃中所有的子行程結束完畢再去結束父行程
p.join()
12.行程間通信
需要使用到了multiprocessing模塊的Queue(佇列),
from multiprocessing import Process, Queue q = Queue() ##創建佇列 q.put('??') ##將 obj 放入佇列;還有兩個引數[, block[, timeout],如果可選引數 block 是True(默認值)而且timeout是None默認值), 將會阻塞當前行程,直到有空的緩沖槽, q.full() ##判斷佇列是否已滿;如果佇列是滿的,回傳True,反之回傳False , q.qsize() ##回傳佇列的大致長度,由于多執行緒或者多行程的背景關系,這個數字是不可靠的, q.get() ##從佇列中取出并回傳物件,注意:先進先出,可選引數[block[, timeout]];如果可選引數 block 是True(默認值) 而且timeout是None(默認值), 將會阻塞當前行程,直到佇列中出現可用的物件,
參考
1.快速入門 — Flask-SQLAlchemy 2.0 documentation
http://www.pythondoc.com/flask-sqlalchemy/quickstart.html
2.Python3多行程multiprocessing模塊的使用
https://www.jianshu.com/p/a5f10c152c20
3.multiprocessing --- 基于行程的并行
https://docs.python.org/zh-cn/3.7/library/multiprocessing.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/342103.html
標籤:其他
上一篇:Spring JDBC
