python - 在进程 Python 之间交换对象
问题描述
以下代码检查是否通过进程在四面体列表中验证了某个属性。
运行方法
def process(tetrahedrons, startOfWork, endOfWork, RelativeResult):
print("Start of the process", mp.current_process().name)
result = False
for c in range(startOfWork,endOfWork):
for j in range(c+1,len(tetrahedrons)):
if tetrahedrons[c].IsInterpenetrated(tetrahedrons[j]) == 1:
result = True
print("Relative result = ",result, end="\n\n")
RelativeResult.put(result)
并行搜索方法
def parallelInterpenetrationSearchWithProcess(self, tetrahedrons):
'''
parallel verification of the existence
of an interpenetration between tetrahedra
'''
time_start = datetime.datetime.now()
N_CORE = mp.cpu_count()
Workers = []
QuantityForWorker = int(len(tetrahedrons) / N_CORE)
Rest = len(tetrahedrons) % N_CORE
StartWork = 0
if QuantityForWorker == 0:
iterations = Rest -1
else:
iterations = N_CORE
for i in range(iterations):
EndWork = StartWork + QuantityForWorker
if i < Rest -1:
EndWork = EndWork + 1
IdWork = i
Workers.append( mp.Process( target = process,
args = ( tetrahedrons,
StartWork,
EndWork,
output
)
)
)
Workers[IdWork].start()
StartWork = EndWork
for worker in Workers:
worker.join()
while not(RelativeResult.empty()):
if RelativeResult.get():
print( "Parallel search took %f seconds" %
( timeelapsed( time_start ) )
)
return True
print( "Parallel search took %f seconds" %
( timeelapsed( time_start ) )
)
return False
它适用于输入数组“四面体”的小尺寸,但是它给我带来了问题,因为后者的更高维度会惨遭失败。我认为这是因为每次我去创建一个进程时,它都会在内存中创建一个副本,其中包含所有可用的当前参数。您知道将 168,000 个元素的数组复制 4、5、6 或 8 次并不是一件好事。所以我正在寻找一种在我可以使用的所有进程之间共享这个数组的方法。我已经看到了可以通过共享内存的帮助来利用的各种方法multiprocessing.sharedctypes.RawArray
,使用multiprocessing.Queue()
-instance,但我无法从中获得任何好处。
总结:
如何共享一个数组,以便它可以被不同的进程读取,而后者不必在本地创建自己的实例?
如果您不明白,请不要犹豫。
解决方案
推荐阅读
- java - 在 android 画布上绘图时,在 onDraw 中计算值与从内存中读取它们的性能成本是多少?
- arrays - 如何确定哪个 childNode 最接近 SceneKit 中的屏幕中心?
- list - 如何通过此数据类型表示来表示列表列表
- c++ - 在实时项目中哪些场景可以使用虚函数?
- php - 限制 MySQL 表的条目,保持唯一 id 固定
- c++ - 当我们在字符串中插入一些字符时会发生什么?
- c++ - 哪个 clang 工具可以捕获超出范围的迭代器?
- c - 查找一条线段是否是另一条线的子段
- python - 在base32编码中无法让python跟随go
- unit-testing - Kotlin Multiplatform Gradle 单元测试无法解析 kotlin.test 参考