使用本地和远程的 Actor 类

问题描述

我想在本地/单进程和远程/多进程场景中使用类。 到目前为止我得到的是:

@ray.remote
class BlahRemote(Blah): pass

class Blah(object):

   def save(self,line):
      if self.is_writer : self.file.write(line)
      else : self.writer.save.remote(line)

我想做的是这样的:

   def save(self,line):
      if self.is_writer : self.file.write(line)
      else :
        if RAY.ISREMOTE(self.writer) : self.writer.save.remote(line)
        else : self.writer.save(line)

有没有办法做这个检查 RAY.ISREMOTE()

解决方法

我所做的是这个(用set()替换save(),之前使用的文件示例使其更容易掌握)

出人意料的是有 3 种情况而不是 2 种,漏掉了 Reader 和 Writer 都在同一个进程中的情况。

def set(self,key,value): 
    if self.is_writer : 
        say('kvset',f'local-writer-set> {key} => {value}')
        self.store.set_kv(key,value)
    else : 
        if str(self.writer).startswith('Actor') :
            say('kvset',f'remote-set> {key} => {value}')
            self.writer.set.remote(key,value)
        else :
            say('kvset',f'local-reader-set> {key} => {value}')
            self.writer.set(key,value)