问题描述
我有与ray并行的巨大的远程功能,但是在其中,确实需要串行执行一个循环-每个迭代都必须全局执行一次,并且只能执行一次。所以,我的想法是要有一个互斥锁来同步执行线程
@H_502_2@import ray
ray.init ()
@ray.remote
def remote_function ():
# misc calculation
# loop to be synchronized
lock (mutex)
for i in range (gazillion):
# do some prep work
unlock (mutex)
# do heavy work
lock (mutex)
unlock (mutex)
这种方法在并行C代码中非常有用,但是当我尝试使用互斥体和ray进行搜索时,基本上没有关于该主题的信息,因此我怀疑我缺少一些关键概念。我的问题是-这种方法(围绕循环启动和停止进行锁定/解锁)在python 3.7 / ray中是否有效(如果不是)-是否可以使用一种设计模式来代替?我应该在ray中安全使用哪个互斥体库?
谢谢
解决方法
Ray的任务在不同的进程中运行。这意味着每个Ray任务都不会访问其他任务的内存,并且您不必担心同步。
对于共享内存中的共享对象,它们是只读的。因此,您也不必担心同步对它们的访问。