python - 有没有办法让两个进程共享同一个全局变量?
问题描述
我使用线程编写了一个程序,但由于它是 CPU 密集型的,线程实际上并没有带来任何性能提升,所以我开始研究多处理。到目前为止,我所有的代码都已经写好了,记住两个线程可以在同一个全局变量上工作,但据我所知,多处理是不可能的。
有没有办法在不重写我的整个代码的情况下做这样的事情?
我只需要在第二个过程中进行一些计算并更改一些变量的值。
我打算实现的一个简单示例:
target=list()
queue=list()
def func(a,b,target):
temp=list()
for i in range(0,a):
for j in range(0,b)
temp.append('a'+str(i)+'b'+str(j))
target=list()
def process_func():
go=True
while go:
target_=queue.pop(0)
func(target[0],target[1],target[2])
if __name__=='__main__':
p=multiprocessing.Process(target=process_func)
p.start()
主要功能是将列表添加到队列中。我无法弄清楚如何做这样的事情。我的主要目标是以一种对现有代码进行最小更改的方式来执行此操作。
我虽然可以做的是使用多处理模块中的队列,但我不明白如何准确地实现它们,因为我能找到的教程会导致我的代码发生很大变化。
解决方案
https://docs.python.org/3/library/multiprocessing.html#sharing-state-between-processes
您可以在上面阅读很多内容。但是,如何在 Python 中使用多处理队列?解释了multiprocessing.Queue
,在这种情况下,进程 A 和进程 B 应该被赋予队列对象作为输入以从相同的消费。
推荐阅读
- r - R:识别出一个“1”后,重复(进位)“1”直到ID的记录结束
- javascript - 我在 JavaScript 中复制到剪贴板代码不起作用
- windows-runtime - C++Winrt如何在不终止程序的情况下抛出和处理异常
- postgresql - JpaRepository 中用于多对多的自定义查询
- visual-studio-code - sencha.vscode-extjs 静默无法在 Visual Studio Code 中运行 sencha app watch
- typescript - TypeScript:如何处理泛型函数参数中的多态返回类型?
- python - f2py:如何从 python 中的 fortran 库中打开和读取字节交换(大端)文件?
- amazon-web-services - codeartifact 清理/删除多个包 - 或者如何为一些 pip install 包跳过它?
- python - python - 如何根据python中结果列表的长度获取列表元素的所有可能组合?
- r - 从数据框中删除不包含任何数值的行