欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

  • 實例化 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()

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

  • 當(dāng)向隊列中放入的數(shù)據(jù)較大時,就會在join()處卡死
  • 為了避免這種情況,常的做法是先使用get()將數(shù)據(jù)取出來,再使用join()方法
  • 如果不這樣處理,隊列進(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)建一個隊列
  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'雙精度浮點類型
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 函數(shù)聲明先后順序出現(xiàn)的問題

    解決Python 函數(shù)聲明先后順序出現(xiàn)的問題

    這篇文章主要介紹了如何解決Python 函數(shù)聲明先后順序的問題,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-09-09
  • 用python寫的一個wordpress的采集程序

    用python寫的一個wordpress的采集程序

    在學(xué)習(xí)python的過程中,經(jīng)過不斷的嘗試及努力,終于完成了第一個像樣的python程序,雖然還有很多需要優(yōu)化的地方,但是目前基本上實現(xiàn)了我所要求的功能,需要的朋友可以參考下
    2016-02-02
  • Python常用內(nèi)置模塊之xml模塊(詳解)

    Python常用內(nèi)置模塊之xml模塊(詳解)

    下面小編就為大家?guī)硪黄狿ython常用內(nèi)置模塊之xml模塊(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Python字典和集合講解

    Python字典和集合講解

    這篇文章主要給大家假關(guān)節(jié)的是Python字典和集合,字典是Python內(nèi)置的數(shù)據(jù)結(jié)構(gòu)之一,是一個無序的序列;而集合是python語言提供的內(nèi)置數(shù)據(jù)結(jié)構(gòu),沒有value的字典,集合類型與其他類型最大的區(qū)別在于,它不包含重復(fù)元素。想具體了解有關(guān)python字典與集合,請看下面文章內(nèi)容
    2021-10-10
  • 利用Python?Matlab繪制曲線圖的簡單實例

    利用Python?Matlab繪制曲線圖的簡單實例

    們經(jīng)常會遇到這種情況,有一個數(shù)學(xué)函數(shù),我們希望了解他的圖像,這個時候使用python 的matplotlib就可以幫助我們,下面這篇文章主要介紹了利用Python?Matlab繪制曲線圖的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Python寫安全小工具之TCP全連接端口掃描器

    Python寫安全小工具之TCP全連接端口掃描器

    這篇文章主要介紹了Python寫安全小工具之TCP全連接端口掃描器,文章通過TCP connect來實現(xiàn)一個TCP全連接端口掃描器。具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • Python 創(chuàng)建子進(jìn)程模塊subprocess詳解

    Python 創(chuàng)建子進(jìn)程模塊subprocess詳解

    這篇文章主要介紹了Python 創(chuàng)建子進(jìn)程模塊subprocess詳解,本文詳細(xì)講解了subprocess模塊的方法、參數(shù)、使用實例等,需要的朋友可以參考下
    2015-04-04
  • Python的None和C++的NULL用法解讀

    Python的None和C++的NULL用法解讀

    這篇文章主要介紹了Python的None和C++的NULL用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Jupyter安裝nbextensions,啟動提示沒有nbextensions庫

    Jupyter安裝nbextensions,啟動提示沒有nbextensions庫

    這篇文章主要介紹了Jupyter安裝nbextensions,啟動提示沒有nbextensions庫,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Python開發(fā)之利用re模塊去除代碼塊注釋

    Python開發(fā)之利用re模塊去除代碼塊注釋

    Python的re模塊主要是正則表達(dá)式的操作函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python開發(fā)之利用re模塊去除代碼塊注釋的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11

最新評論