liuxin95 2019-03-01 10:34 采纳率: 0%
浏览 574
已结题

利用python中的mangers和queue模块做一个两个电脑通信的demo,却说没有register这个属性

talkDemo_1

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

message1 = queue.Queue()
message2 = queue.Queue()

class QueueManager(BaseManager):
    pass

def get_message1():
    global message1
    return message1

def get_message2():
    global message2
    return message2

QueueManager.register('message_queue_1',callable = get_message1)
QueueManager.register('message_queue_2',callable = get_message2)

def startManager(host,port,key):
    manager = QueueManager(address = (host,port),authkey = key)
    manager.start()
    return manager


if __name__ == '__main__':
    manager = startManager('127.0.0.1', 5000, b'abc')
    mess1 = manager.message_queue_1()
    mess2 = manager.message_queue_2()
    #mess1.put(1)
    #mess2.get()
    name = input('请输入您的昵称:')
    print('可以开始通信了!')
    while(True):
        inform = input()
        if inform == 'over':
            mess1.put(inform)
            time.sleep(5)
            break
        inform = '%s\n\t%s:%s' % (datetime.now(),name,inform)
        mess1.put(inform)
        print(inform)
        getInform = mess2.get()
        print(getInform)
    manager.shutdown()
    print('结束通话')

talkDemo_2.py

import queue
from multiprocessing.managers import BaseManager
from datetime import datetime

def QueueManager(BaseManager):
    pass

QueueManager.register('message_queue_1')
QueueManager.register('message_queue_2')    

def connectManager(addr,port,key):
    manager = QueueManager(address = (addr, port), authkey = key)
    manager.connect()
    return manager

if __name__ == '__main__':
    addr = '127.0.0.1'
    print('connect to %s...' % addr)
    manager = connectManager(addr,5000,b'abc')
    mess1 = manager.message_queue_1()
    mess2 = manager.message_queue_2()
    #mess1.get()
    #mess2.put(1)
    name = input('请输入您的昵称:')
    print('已连接,可以开始通信了!')
    while(True):
        getInform = mess1.get()
        print(getInform)
        if getInform == 'over':
            break
        inform = input()
        inform = '%s\n\t%s:%s' % (datetime.now(),name,inform)
        print(inform)
        mess2.put(inform)
    print('通话结束')

运行talkDemo_2.py的时候,报错Traceback (most recent call last):
File "E:\Python_program\practice\talkDemo_2.py", line 8, in
QueueManager.register('message_queue_1')
AttributeError: 'function' object has no attribute 'register'

  • 写回答

1条回答

  • devmiao 2019-03-02 23:38
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器