在Python中创建对进程的引用

2024-07-04 14:00:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我计划创建一个聊天机器人抽搐.tv在Python中。我想为不同的主要功能使用多个进程(一个用于bot本身,另一个用于GUI)。每个进程都应该以变量的形式引用其他进程。我还没有开始编写bot本身的代码,但是我用一个小例子测试了多重处理。你知道吗

主文件:

from BotProcess import botProcess
from GuiProcess import guiProcess

botProcess = botProcess()
guiProcess = guiProcess()
botProcess.guiProcess = guiProcess
guiProcess.botProcess = botProcess

botProcess = botProcess()
guiProcess = guiProcess()
botProcess.guiProcess = guiProcess
guiProcess.botProcess = botProcess

botProcess.start()
guiProcess.start()

进程文件:

class botProcess(multiprocessing.Process):

    guiProcess = ""

    def run(self):
        # Run Bot

    def someOtherMethod(self):
        # doSomething

gui进程文件:

class guiProcess(multiprocessing.Process):

    botProcess = ""

    def run(self):
        # Display GUI
        botProcess.someOtherMethod();

每次尝试在另一个进程上运行方法时,都会收到以下错误消息:

AttributeError: 'NoneType' object has no attribute 'someOtherMethod'

有没有简单的方法来解决这个问题?或者我应该尝试其他方法(例如线程)而不是多处理?你知道吗


Tags: 文件方法fromimportself进程defbot
1条回答
网友
1楼 · 发布于 2024-07-04 14:00:28

我留下了一条评论,为什么我认为你应该使用线程模块而不是多处理,但是如果你想坚持多处理,我认为你的问题是: 首先,应该切换变量名,使它们与类不同。你知道吗

bot_process = botProcess()

使用好的变量名不仅可以帮助其他人阅读您的代码,还可以避免任何意外的运行时和语法错误。 第二,这样做:

botProcess = botProcess()
guiProcess = guiProcess()
botProcess.guiProcess = guiProcess
guiProcess.botProcess = botProcess

botProcess = botProcess()
guiProcess = guiProcess()
botProcess.guiProcess = guiProcess
guiProcess.botProcess = botProcess

是多余的。你只是把同样的变量赋给同样的东西两次。你知道吗

第三,也许你真正想要的是,你在你的类中拥有的不是你想要的成员。以下是您应该拥有的:

class guiProcess(multiprocessing.Process):

    def __init__(self):
        self.other_bot_process = None

    def run(self):
        # Display GUI
        self.other_bot_process.someOtherMethod();

(另一个班级也是如此) 然后在主文件中:

bot_process = botProcess()
gui_process = guiProcess()
bot_process.other_gui_process = gui_process
gui_process.other_bot_process = bot_process

现在,其他\u gui \u进程和其他\u bot \u进程是类的成员,可以访问它们的实例。以前它们只是局部变量,只能在定义它们的类中使用。你知道吗

相关问题 更多 >

    热门问题