91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python通過4種方式實現進程數據通信

發布時間:2020-10-10 20:46:27 來源:腳本之家 閱讀:212 作者:我太難了008 欄目:開發技術

python提供了4種方式來滿足進程間的數據通信

1. 使用multiprocessing.Queue可以在進程間通信,但不能在Pool池創建的進程間進行通信

2. 使用multiprocessing.Manager.Queue可以在Pool進程池創建的進程間進行通信

3. 通過Pipe進行線程間的通信, pipe進程間通信的性能高于Queue,但是它只能在兩個進程間進行通信

4. 使用Manager類提供的數據結構可以進行進程間的通信

from multiprocessing import Process, Queue, Pool, Manager, Pipe
# 注意線程間的通信,使用的queue.Queue
# from queue import Queue
import time


# 1. 使用multiprocessing.Queue可以在進程間通信

# def producer(queue):
#   queue.put('A')
#   time.sleep(2)
#
# def consumer(queue):
#   time.sleep(2)
#   data = queue.get()
#   print(data)
#
# if __name__ == '__main__':
#   queue= Queue(10)
#   p = Process(target=producer, args=(queue,))
#   c = Process(target=consumer, args=(queue,))
#   p.start()
#   c.start()
#   p.join()
#   c.join()


# 2. 使用共享全局變量,在多進程間通信(結論: 不行)
# def producer(a):
#   a += 1
#   time.sleep(2)
#
#
# def consumer(a):
#   time.sleep(2)
#   print(a)
#
# if __name__ == '__main__':
#   a = 1
#   p = Process(target=producer, args=(a,))
#   c = Process(target=consumer, args=(a,))
#   p.start()
#   c.start()
#   p.join()
#   c.join()


# 3. multiprocessing.Queue不能用于multiprocessing.Pool進程池創建的進程間進行通信
# def producer(queue):
#   queue.put('A')
#   time.sleep(2)
#
#
# def consumer(queue):
#   time.sleep(2)
#   data = queue.get()
#   print("consumer:%s" % data)
#
#
# if __name__ == '__main__':
#   # queue = Queue(10) # 這個是使用multiprocessing.Queue,無效
#   queue = Manager().Queue(10) # 這個是使用multiprocessing.Manager.Queue, 可以
#   pool = Pool(2)
#   pool.apply_async(producer, args=(queue,))
#   pool.apply_async(consumer, args=(queue,))
#   pool.close()
#   pool.join()


# 4.通過Pipe進行線程間的通信, pipe進程間通信的性能高于Queue
# def producer(pipe):
#   pipe.send('admin')
#
#
# def consumer(pipe):
#   data = pipe.recv()
#   print("consumer:%s" % data)
#
#
# if __name__ == '__main__':
#   receive_pipe, send_pipe = Pipe()
#   """Pipe只能適應于兩個進程間的通信"""
#   p = Process(target=producer, args=(send_pipe,))
#   c = Process(target=consumer, args=(receive_pipe,))
#   p.start()
#   c.start()
#   p.join()
#   c.join()


# 5. 進程間通信的其它方式

def add_data(p_dict, key, value):
  p_dict[key] = value

if __name__ == '__main__':
  progress_dict = Manager().dict() #Manager()類中提供的數據結構都能夠做到進程的通信
  first_progress = Process(target=add_data, args=(progress_dict, 'name', 'admin',))
  second_progress = Process(target=add_data, args=(progress_dict, 'age', 45,))
  first_progress.start()
  second_progress.start()
  first_progress.join()
  second_progress.join()
  print(progress_dict) #{'age': 45, 'name': 'admin'}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

日喀则市| 嘉祥县| 庆元县| 双江| 太仓市| 巴彦县| 开化县| 龙海市| 千阳县| 义马市| 兴城市| 远安县| 加查县| 奎屯市| 上蔡县| 上饶县| 乌拉特后旗| 民乐县| 汝南县| 岐山县| 贺州市| 上饶市| 普陀区| 康定县| 仁化县| 通榆县| 阿克陶县| 英吉沙县| 海伦市| 通山县| 佳木斯市| 汕头市| 怀化市| 廊坊市| 辽阳县| 海南省| 满洲里市| 云林县| 肃北| 台中县| 团风县|