#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong


import random, time, queue

from multiprocessing.managers import BaseManager

from queue import Queue


'''

worker进程:执行任务,反馈结果

这部分内容与官网教程,有些出入

'''



# 从BaseManager继承QueueManager

class QueueManager(BaseManager):

    pass


# 从网络上获取对应的queue

QueueManager.register("get_queue_t")

QueueManager.register("get_queue_rs")

# 连接到服务器,也就是运行task_master.py的机器:

server_ip = "127.0.0.1"

print("Connect to server...%s" % server_ip)

manager = QueueManager(address=(server_ip, 5000), authkey=b"love8013")  # 保证端口和密匙一致

# 从网络连接

manager.connect()

# 获得通过网络访问的Queue对象

t = manager.get_queue_t()

rs = manager.get_queue_rs()

print("1")

# 从task队列中读取任务,并将结果写会result队列

for i in range(10):

    try:

        n = t.get(timeout=1)

        print('run task %d * %d...' % (n, n))

        r = '%d * %d = %d' % (n, n, n*n)

        time.sleep(1)

        rs.put(r)

    except Queue.Empty:

        print('task queue is empty.')

print('worker exit.')