Discuss / Python / 交作业(win7 x64) 修改代码使其在win7 x64上运行通过

交作业(win7 x64) 修改代码使其在win7 x64上运行通过

Topic source

win7 x64

参考了同学们的答案和CSDN

CSDN23楼http://bbs.csdn.net/topics/390869705/

server

#task_master.py
#server,往任务队列中放任务后, 从结果队列中获取结果


import random, time, queue
from multiprocessing.managers import BaseManager
from multiprocessing import freeze_support

#发送任务的队列
task_queue = queue.Queue()
#接收结果的队列
result_queue = queue.Queue()

class QueueManager(BaseManager):
    pass

def return_task_queue():
    global task_queue
    return task_queue

def return_result_queue():
    global result_queue
    return result_queue



#注册到网络
def start_server():
    QueueManager.register('get_task_queue', callable = return_task_queue)
    QueueManager.register('get_result_queue', callable = return_result_queue)
    manager = QueueManager(address=('127.0.0.1', 5000), authkey=b'abc')

    manager.start()

    task = manager.get_task_queue()
    result = manager.get_result_queue()

    for i in range(10):
        n = random.randint(0, 10000)
        print ('Put task %d...' % n)
        task.put(n)

    print ('Try get results...')
    for i in range(10):
        r = result.get(timeout = 10)
        print ('Result: %s' % r)

    manager.shutdown()
    print ('master exit.')


if __name__ == '__main__':
    freeze_support()
    start_server()

client

# task_worker.py
#客户端,从服务器的任务队列中获取任务,进行计算并放入结果队列

import time, sys, queue
from multiprocessing.managers import BaseManager
from multiprocessing import freeze_support


class QueueManager(BaseManager):
    pass


def start_cal():

    QueueManager.register('get_task_queue')
    QueueManager.register('get_result_queue')

    server_addr = '127.0.0.1'
    print ('Connect to server %s ...' % server_addr)

    m = QueueManager(address = (server_addr, 5000), authkey = b'abc')
    m.connect()

    task = m.get_task_queue()
    result = m.get_result_queue()

    for i in range(10):
        try:
            n = task.get(timeout = 1)
            print ('Run task %d * %d' % (n, n))
            r = '%d * %d = %d' % (n, n, n * n)
            time.sleep(1)
            result.put(r)
        except Queue.Empty:
            print ('task queue is empty.')

    print ('worker exit.')



if __name__ == '__main__':
    freeze_support()
    start_cal()

  • 1

Reply