我打算在Python中为Twitch.tv创建一个聊天机器人。我喜欢为不同的主要功能使用多个进程(一个用于机器人本身,一个用于GUI)。每个进程都应该以变量形式引用其他进程。我还没有开始编写机器人本身,但我用一个小例子测试了多处理。
主档案:
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()
BotProcess文件:
class botProcess(multiprocessing.Process):
guiProcess = ""
def run(self):
# Run Bot
def someOtherMethod(self):
# doSomething
GuiProcess文件:
class guiProcess(multiprocessing.Process):
botProcess = ""
def run(self):
# Display GUI
botProcess.someOtherMethod();
每次我尝试在另一个进程上运行方法时,都会收到以下错误消息:
AttributeError: 'NoneType' object has no attribute 'someOtherMethod'
有没有一种简单的方法可以解决这个问题?或者我应该尝试其他东西(例如线程)而不是多处理?
答案 0 :(得分:0)
我留下评论为什么我认为你应该使用Threading模块而不是Multiprocessing,但如果你想坚持多处理,我认为你的问题是: 首先,您应该切换变量名称,使它们与您的类不同。
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
现在,other_gui_process和other_bot_process是类的成员,可以访问它们的实例。之前它们只是局部变量,只能在定义它们的类中使用。