日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中o_Python I/O与进程的详细讲解

發布時間:2023/12/9 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中o_Python I/O与进程的详细讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

I/O

with語句

with context_expression [as target(s)]:

with-body

context_expression返回值遵從上下文管理協議,包含__enter__()與__exit__()方法,as語句的target(s)得到的是__enter__()返回值,執行with-body后會調用上下文管理器的__exit__()方法,使用with語句,可以減輕某些代碼編寫負擔,比如文件讀寫。

讀文件

try:

f = open('/path/to/file', 'r', encoding='utf8', errors='ignore')

print(f.read(1024))

finally:

if f:

f.close()

# 使用with語句

with open('/path/to/file', 'r') as f:

print(f.read(1024))

open()方法打開文件模式,默認以utf8格式讀取,添加后綴'b'(rb、wb)表示以二進制方式讀取,mode有以下幾種:

StringIO和BytesIO

StringIO將string按照文件的方式讀取和寫入,BytesIO將bytes按照文件的的方式讀取和寫入。

OS

通過OS模塊,與操作系統信息交互,如創建、移動、列出文件等等。

序列化

通過內置模塊pickle,實現序列化與反序列化,使用json模塊完成JSON數據的序列化和反序列化。

import pickle

d = dict(name = 'sha', age = 26)

# 將序列化內容寫入文件

with open('dump', 'wb') as f:

pickle.dump(d, f)

# 從文件中讀取序列化內容

with open('dump', 'rb') as f:

d = pickle.load(f)

print(d) # {'name': 'sha', 'age': 26}

進程與線程

進程

Python調用一次進程fork()會有兩次返回,子進程永遠返回0,父進程中返回子進程ID。os.fork()不支持windows,multiprocessing模塊是跨平臺版本的多進程模塊。

import os

pid = os.fork() # pid后的代碼會在兩個進程中分別執行,通過pid值不同判斷父子

if pid == 0:

print('exec in child process')

else:

print('exec in parent process')

# exec in parent process

# exec in child process

進程池

from multiprocessing import Pool

def say(x):

print(x)

if __name__ == '__main__':

p = Pool(4)

for i in range(5):

p.apply_async(say, args=(i,))

p.close()

p.join()

子進程

import subprocess

print('$ nslookup amsimple.com')

r = subprocess.call(['nslookup', 'amsimple.com'])

print('Exit code:', r)

進程間通信

進程間通信通過Queue與Pipes實現,父進程創建Queue傳遞給子進程。

線程

Python提供兩個模塊_thread與threading,前者是低級模塊后者是高級模塊,對_thread進行了封裝。

啟動一個線程就是把一個函數傳入并創建Thread實例,然后調用start()開始執行:

import threading

# 新線程執行的代碼:

def say():

print('%s say hello' % threading.current_thread().name)

t = threading.Thread(target=say, name = 'SayThread')

t.start()

t.join()

threading.current_thread()返回但前運行線程的實例,主線程名MainTreed,子線程名在創建時指定。

通過threading.Lock()獲取鎖,某些需要線程安全的操作,先通過acquire()獲取鎖,通過release()釋放鎖。

Python中的線程因為GIL鎖,無法真正利用多核。

通過ThreadLocal實現線程級的全局變量,不同線程間相互不影響。

import threading

th_local = threading.local() # th_local會跟線程綁定,不同線程看到的是不同對象

分布式進程

managers模塊依靠網絡通信,可以把多進程分布到多臺機器上。

正則

通過'r'前綴定義正則字符串,通過re模塊做正則匹配等操作。

import re

s = r'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$'

re.match(s, 'shasharoman@gmail.com')

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

總結

以上是生活随笔為你收集整理的python中o_Python I/O与进程的详细讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。