您的位置:首页 > 编程语言 > Python开发

在python多进程中使用manager和Barrier

2016-12-01 11:04 337 查看
注意:Barrier是PYTHON3才有的功能,在2中无法测试。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import multiprocessing
from multiprocessing import Barrier, Lock, Process
from time import time
from datetime import datetime

def test_with_barrier(synchronizer, seializer):
name = multiprocessing.current_process().name
synchronizer.wait()
now = time()
with serializer:
print("process %s -----> %s" % (name, datetime.fromtimestamp(now)))

def test_without_barrier():
name = multiprocessing.current_process().name
now = time()
print("process %s -----> %s" % (name, datetime.fromtimestamp(now)))

def worker(dictionary, key, item):
dictionary[key] = item
print(key, item)

if __name__ == '__main__':
synchronizer = Barrier(2)
serializer = Lock()
Process(name='p1 - test_with_barrier', target=test_with_barrier, args=(synchronizer, serializer)).start()
Process(name='p2 - test_with_barrier', target=test_with_barrier, args=(synchronizer, serializer)).start()
Process(name='p3 - test_without_barrier', target=test_without_barrier).start()
Process(name='p4 - test_without_barrier', target=test_without_barrier).start()

mgr = multiprocessing.Manager()
dictionary = mgr.dict()
jobs = [multiprocessing.Process\
(target=worker, args=(dictionary, i, i*2))
for i in range(10)
]
for j in jobs:
j.start()
for j in jobs:
j.join()


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: