ZMQ

"""
# ##############################    生成器 ##############################################
(i for i in [1,2,3,4])      # 惰性加载
a = range(10)  # 生成器对象


def shorten():
    string_list = list('abcdefg')
    for i in string_list:
        demo = yield i
        print(demo)


if __name__ == '__main__':
    test = shorten()
    print(next(test))
    test.send('123')


# ##############################    map      ##############################################

def func_map(x):
    return x + 1


if __name__ == '__main__':
    demo = [1, 2, 3, 4]
    obj = map(func_map, demo)  # <map object at 0x7ff24539d908>
    print(demo)  # [1, 2, 3, 4]
    print(obj)
    print(list(obj))  # [2, 3, 4, 5]

    用列表解析实现map
    (func_map(x) for x in demo)

# ##############################    filter      ##############################################


def func_filter(x):
    print(x)
    return True


if __name__ == '__main__':
    demo = [1, 2, 3, 4]
    obj = filter(func_filter, demo)
    print(obj)  # <filter object at 0x7f2b0e19e908>
    print(list(obj))  # [1, 2, 3, 4]
    用列表解析实现filter
    (x for x in demo if x >2)

# ##############################    sorted      ##############################################
sorted(iterable,key=None,reverse=False)



# ##############################    zip      ##############################################
keys = ['foobar', 'barzz', 'ba!']
print(list(map(len, keys)))  # [6, 5, 3]
print(zip(keys))
print(list(zip(keys)))  # [('foobar',), ('barzz',), ('ba!',)]
print(zip(keys, [6, 5, 3]))
print(list(zip(keys, [6, 5, 3])))  # [('foobar', 6), ('barzz', 5), ('ba!', 3)]
print(dict(zip(keys, [6, 5, 3])))  # {'foobar': 6, 'barzz': 5, 'ba!': 3}
"""

import multiprocessing
import random
import zmq


def compute():
    return sum([random.randint(1, 100) for i in range(1000000)])
    # return '张三'


def worker():
    context = zmq.Context()
    work_receiver = context.socket(zmq.PULL)
    work_receiver.connect('tcp://0.0.0.0:5555')
    result_sender = context.socket(zmq.PUSH)
    result_sender.connect('tcp://0.0.0.0:5556')
    poller = zmq.Poller()
    poller.register(work_receiver, zmq.POLLIN)

    while True:
        socks = dict(poller.poll())
        if socks.get(work_receiver) == zmq.POLLIN:
            obj = work_receiver.recv_pyobj()
            result_sender.send_pyobj(obj())


processes = []
for i in range(2):
    p = multiprocessing.Process(target=worker)
    p.start()
    processes.append(p)

context = zmq.Context()
worker_sender = context.socket(zmq.PUSH)
worker_sender.bind('tcp://0.0.0.0:5555')

result_receiver = context.socket(zmq.PULL)
result_receiver.bind('tcp://0.0.0.0:5556')

for x in range(2):
    worker_sender.send_pyobj(compute)
results = []
for x in range(2):
    results.append(result_receiver.recv_pyobj())
for p in processes:
    p.terminate()
print(results)

 

posted @ 2019-03-18 09:02  慕沁  阅读(319)  评论(0)    收藏  举报