【发布时间】:2021-02-22 05:09:24
【问题描述】:
我目前正在为我的流媒体编写一个聊天机器人。由于它需要一次执行多项操作,因此我正在使用多处理模块,这样它仍然可以同时响应命令并执行功能。我现在的问题是我有一个进程专门用于一些网络抓取,而另一个进程用于查看聊天并在键入命令时做出响应。我的想法是,如果我将来自一个进程的信息附加到全局列表中,然后在聊天中键入命令时,另一个进程可以使用附加列表中的信息。好吧,这没有用,我了解到这是因为这两个进程没有共享内存,虽然它们都可以访问同一个列表,但它们都是列表的副本,所以即使一个附加到另一个处理'的情况下,它仍然是空的。我在这里遇到了一些关于堆栈溢出的问题,但是这些示例非常具体,而且由于我对编码还很陌生,所以我很难弄清楚如何将它应用到我自己的代码中。出于这个确切的原因,我已经简化了问题,以便它可以帮助处于类似情况的其他人,通过让我的示例足够广泛和简单,以便任何人在阅读解决方案后都能理解它。因此,这不是我实际用于聊天机器人的代码,而是模仿问题的代码。
import multiprocessing as mp
import time
globalList = []
def readList():
while True:
time.sleep(2)
if globalList:
print(globalList)
else:
print("List is Empty")
print(globalList)
def writeList():
while True:
time.sleep(3)
globalList.append("Item")
print(globalList)
if __name__ == '__main__':
p1 = mp.Process(target=readList)
p2 = mp.Process(target=writeList)
p1.start()
p2.start()
运行此代码时,您可以看到 writeList 函数会不断向列表中添加另一个项目,但 readList 函数会一直显示一个空列表。
我希望那里的一些大师可以帮助我解决这个问题。
【问题讨论】:
标签: python multiprocessing global-variables shared-memory