"""
# ############################## 生成器 ##############################################
(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)