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