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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!