最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python?包之?multiprocessing?多進(jìn)程

 更新時間:2022年04月02日 11:05:07   作者:autofelix  
這篇文章主要介紹了python?包之?multiprocessing?多進(jìn)程,首先創(chuàng)建一個進(jìn)程。實(shí)例化?Process?類創(chuàng)建一個進(jìn)程對象、然后調(diào)用它的?start?方法即可生成一個子進(jìn)程,下文更多相關(guān)資料,需要的朋友可以參考一下

一、創(chuàng)建一個進(jìn)程

  • 實(shí)例化 Process 類創(chuàng)建一個進(jìn)程對象
  • 然后調(diào)用它的 start 方法即可生成一個子進(jìn)程
from multiprocessing import Process

def func(s):
print(s)

if __name__ == '__main__':
p = Process(target=func, args=('autofelix', ))
p.start()
p.join()

二、創(chuàng)建多個進(jìn)程

from multiprocessing import Process

def func(s):
print(s)

if __name__ == '__main__':
process = [
Process(target=func, args=('1', ))
Process(target=func, args=('2', ))
]

[p.start() for p in process]
[p.join() for p in process]

三、管道pipe進(jìn)行進(jìn)程間通信

Pipe(duplex=True):表示雙工通信,也就是雙向的,既可以接受也可以發(fā)送數(shù)據(jù),默認(rèn)為True

Pipe(duplex=False):表示單工通信,也就是單向的,只能進(jìn)行接受或者發(fā)送數(shù)據(jù)

from multiprocessing import Process, Pipe

def func(conn):
print('send a list object ot other side...')
# 從管道對象的一端發(fā)送數(shù)據(jù)對象
conn.send(['33', 44, None])
conn.close()

if __name__ == '__main__':
# 默認(rèn)創(chuàng)建一個雙工管道對象,返回的兩個對象代表管道的兩端,
# 雙工表示兩端的對象都可以發(fā)送和接收數(shù)據(jù),但是需要注意,
# 需要避免多個進(jìn)程或線程從一端同時讀或?qū)憯?shù)據(jù)
parent_conn, child_conn = Pipe()
p = Process(target=func, args=(child_conn, ))
p.start()
# 從管道的另一端接收數(shù)據(jù)對象
print(parent_conn.recv())
p.join()

四、隊(duì)列Queue進(jìn)行進(jìn)程間通信

  • 當(dāng)向隊(duì)列中放入的數(shù)據(jù)較大時,就會在join()處卡死
  • 為了避免這種情況,常的做法是先使用get()將數(shù)據(jù)取出來,再使用join()方法
  • 如果不這樣處理,隊(duì)列進(jìn)程將不能正常終止,造成死鎖情況
from multiprocessing import Process, Queue

def func(q):
  print('put a list object to queue...')
  # 向Queue對象中添加一個對象
  q.put(['33', 44, None])

if __name__ == '__main__':
  # 創(chuàng)建一個隊(duì)列
  q = Queue()
  p = Process(target=func, args=(q, ))
  p.start()
  # 從Queue對象中獲取一個對象
  print(q.get())
  p.join()
-----------------------------------
?著作權(quán)歸作者所有:來自51CTO博客作者autofelix的原創(chuàng)作品,謝絕轉(zhuǎn)載,否則將追究法律責(zé)任
python 包之 multiprocessing 多進(jìn)程教程
https://blog.51cto.com/autofelix/5166197

五、進(jìn)程間同步

  • 使用鎖保證進(jìn)程間的同步操作
from multiprocessing import Process, Lock

def func(lc, num):
# 使用鎖保證以下代碼同一時間只有一個進(jìn)程在執(zhí)行
lc.acquire()
print('process num: ', num)
lc.release()

if __name__ == '__main__':
lock = Lock()
for i in range(5):
Process(target=func, args=(lock, i)).start()

六、進(jìn)程間共享數(shù)據(jù)

  • 使用共享內(nèi)存的方式,共享值Value對象和數(shù)據(jù)Array對象
from multiprocessing import Process, Value, Array

def func(n, a):
n.value = 3.333
for i in range(len(a)):
a[i] = -a[i]

if __name__ == '__main__':
# 第一個參數(shù)d表示數(shù)據(jù)類型'double'雙精度浮點(diǎn)類型
num = Value('d', 0.0)
# 第一個參數(shù)i表示數(shù)據(jù)類型'integer'整型
arr = Array('i', range(6))
p = Process(target=func, args=(num, arr))
p.start()
p.join()
print(num.value)
print(arr[:])

七、進(jìn)程池

  • 創(chuàng)建一個 Pool 進(jìn)程池對象,并執(zhí)行提交給它的任務(wù)
  • 進(jìn)程池對象允許其中的進(jìn)程以不同的方式運(yùn)行
  • 但是需要注意,Pool 對象的方法只能是創(chuàng)建它的進(jìn)程才能調(diào)用
from multiprocessing import Pool
import time

def f(x):
return x * x

if __name__ == '__main__':
with Pool(processes=4) as pool: # start 4 worker processes
# 在進(jìn)程池中開啟一個新的進(jìn)程并執(zhí)行 f 函數(shù)
result = pool.apply_async(f, (10,)) # evaluate "f(10)" asynchronously in a single process
print(result.get(timeout=1)) # prints "100" unless your computer is *very* slow

# map會一直阻塞當(dāng)前進(jìn)程直到運(yùn)行完可迭代對象中的所有元素,并返回結(jié)果。
print(pool.map(f, range(10))) # prints "[0, 1, 4,..., 81]"

# imap是map方法的延遲執(zhí)行版本,對于比較消耗內(nèi)存的迭代,建議使用這個方法,
it = pool.imap(f, range(10))
print(next(it)) # prints "0"
print(next(it)) # prints "1"
print(it.next(timeout=1)) # prints "4" unless your computer is *very* slow

result = pool.apply_async(time.sleep, (10,))
print(result.get(timeout=1)) # raises multiprocessing.TimeoutError

到此這篇關(guān)于python 包之 multiprocessing 多進(jìn)程的文章就介紹到這了,更多相關(guān)python   multiprocessing 多進(jìn)程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python繪制折線圖和條形圖的方法

    python繪制折線圖和條形圖的方法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)折線圖和條形圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Python裝飾器的執(zhí)行過程實(shí)例分析

    Python裝飾器的執(zhí)行過程實(shí)例分析

    這篇文章主要介紹了Python裝飾器的執(zhí)行過程,結(jié)合實(shí)例形式分析了Python裝飾器的原理、執(zhí)行過程及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-06-06
  • Python 高級教程之線程進(jìn)程和協(xié)程的代碼解析

    Python 高級教程之線程進(jìn)程和協(xié)程的代碼解析

    這篇文章主要介紹了Python 高級教程之線程進(jìn)程和協(xié)程的代碼解析,包括使用線程模塊的簡單示例,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • Python?獲取md5值(hashlib)常用方法

    Python?獲取md5值(hashlib)常用方法

    這篇文章主要介紹了Python獲取md5值(hashlib)常用方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • Python+selenium實(shí)現(xiàn)瀏覽器基本操作詳解

    Python+selenium實(shí)現(xiàn)瀏覽器基本操作詳解

    這篇文章主要為大家詳細(xì)介紹了如何通過python腳本實(shí)現(xiàn)瀏覽器的一些基本操作,如:瀏覽器的前進(jìn)后退、頁面刷新等,感興趣的可以學(xué)習(xí)一下
    2022-06-06
  • Python使用Pillow添加水印

    Python使用Pillow添加水印

    這篇文章主要為大家詳細(xì)介紹了Python使用Pillow添加水印,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Python增強(qiáng)下git那長長的指令詳解

    Python增強(qiáng)下git那長長的指令詳解

    這篇文章主要介紹了Python增強(qiáng)下git那長長的指令 ,在開發(fā)中用到的代碼目錄結(jié)構(gòu),本文也給大家詳細(xì)講解,需要的朋友可以參考下
    2021-09-09
  • 基于Pygame實(shí)現(xiàn)簡單的貪吃蛇游戲

    基于Pygame實(shí)現(xiàn)簡單的貪吃蛇游戲

    Pygame是一個專門用來開發(fā)游戲的Python模塊,主要用于開發(fā)、設(shè)計?2D?電子游戲。本文主要為大家介紹了通過Pygame制作一個簡單的貪吃蛇游戲,感興趣的同學(xué)可以關(guān)注一下
    2021-12-12
  • 跟老齊學(xué)Python之再深點(diǎn),更懂list

    跟老齊學(xué)Python之再深點(diǎn),更懂list

    對于list,由于她的確非常非常龐雜,在python中應(yīng)用非常廣泛,所以,雖然已經(jīng)介紹完畢了基礎(chǔ)內(nèi)容,這里還要用一講深入一點(diǎn)點(diǎn),往往越深入越...
    2014-09-09
  • python爬蟲之selenium模塊

    python爬蟲之selenium模塊

    本文詳細(xì)講解了python爬蟲之selenium模塊,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06

最新評論

乌什县| 互助| 富宁县| 高淳县| 蚌埠市| 吴川市| 刚察县| 皮山县| 区。| 启东市| 桓台县| 嘉善县| 郸城县| 麻栗坡县| 揭阳市| 临夏县| 通城县| 侯马市| 富平县| 孟津县| 宜君县| 武穴市| 桐乡市| 台东县| 邓州市| 彩票| 华蓥市| 时尚| 游戏| 调兵山市| 伊吾县| 抚顺县| 平顶山市| 永寿县| 杂多县| 凤山市| 吉木萨尔县| 榆林市| 怀来县| 修文县| 都昌县|