Discuss / Python / 对于文中的测试在WINDOWS下无法运行的修改

对于文中的测试在WINDOWS下无法运行的修改

Topic source

task_master.py

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

task_queue = queue.Queue() result_queue = queue.Queue()

class QueueManager(BaseManager): pass

def task_q(): return task_queue def result_q(): return result_queue QueueManager.register('get_task_queue', callable=task_q) QueueManager.register('get_result_queue', callable=result_q)

manager = QueueManager(address=('127.0.0.1', 5000), authkey=b'abc')

if name=='main': 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.') '''只要在master.py中修改几点: 1.把lambda段改成函数形式 2.增加主机地址'127.0.0.1' 3.在manager.start()前面加入name=='main' worker.py无需任何修改,执行master.py后接着运行worker.py即可。WIN10系统下测试正常

一堆石

#2 Created at ... [Delete] [Delete and Lock User]

非常感谢!

我的worker获取不到task,一直抛出异常empty master,worker代码分别如下:

task_master.py

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

task_queue = queue.Queue() result_queue = queue.Queue()

class QueueManager(BaseManager): pass def task_t(): return task_queue def task_r(): return result_queue def server_start(): QueueManager.register('get_task_queue',callable=task_t) QueueManager.register('get_result_queue',callable=task_r)

manager = QueueManager(address=('127.0.0.1',5000),authkey=b'abc')

manager.start()

task = manager.get_task_queue()
result = manager.get_task_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=100)
    print('Result: %s' % r)
manager.shutdown()

if name == 'main': freeze_support() server_start() print('master exit.')

task_worker.py

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

class QueueManager(BaseManager): pass

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.')


  • 1

Reply