有几个需要注意的点
Topic source再补充一点: 4.对于windows系统,在task_master.py里绑定端口和设置验证码那一句要指明IP地址哦,也即改成: manager = QueueManager(address=('127.0.0.1', 5000), authkey=b'zzj')
- 1
再补充一点: 4.对于windows系统,在task_master.py里绑定端口和设置验证码那一句要指明IP地址哦,也即改成: manager = QueueManager(address=('127.0.0.1', 5000), authkey=b'zzj')
即墨城风
1、windows运行需要把匿名函数替换为自定义的函数 2、Queue.Empty 在python3 上是queue.Empty 3、我在windows powershell上运行服务端有提示关于freeze_support的错误,尝试在代码前面加入该判断后可以解决: if name == 'main: 下面贴代码: server.py
import random, time, queue from multiprocessing.managers import BaseManager
task_queue = queue.Queue() result_queue = queue.Queue()
def ret_task_queue(): global task_queue return task_queue
def ret_result_queue(): global result_queue return result_queue
class QueueManager(BaseManager): pass
if name == 'main': QueueManager.register('get_task_queue', callable=ret_task_queue) QueueManager.register('get_result_queue', callable=ret_result_queue)
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('Queue is empty')
print('worker exit')