【问题标题】:Wait until tasks are finished with Ray in Python等到任务用 Python 中的 Ray 完成
【发布时间】:2020-11-07 21:20:16
【问题描述】:

我有一个如下所示的脚本:

my_dict = {}

@ray.remote
def f(n):
    # adds to my_dict after parsing through a 
    # large file that was split up into 8 sections;
    # each section is parsed in parallel using ray

tasks = [f.remote(i) for i in range(1,9)]
ray.get(tasks) 

with open('my_csv.csv', 'w+') as write_obj: 
    # write rows from my_dict keys & values 

为了使 my_csv.csv 看起来正确,任务必须完成添加到 my_dict。这些任务计算 my_csv 中的列并将它们添加到 my_dict 的某些值中。然而,一旦任务开始运行,my_csv 就会打开并写入未完成的值。在任务完成之前,如何阻止我的代码运行?有没有办法用 ray 做到这一点?

【问题讨论】:

    标签: python ray


    【解决方案1】:

    请注意,当您运行 ray 任务时,它们在不同的进程中运行。也就是说,my_dict 不会被共享!

    这里正确的解决方案是使用演员。 Actor 是一个有状态的进程。

    @ray.remote
    class MyDict:
        def __init__(self):
            self.my_dict = {}
        
        def insert(key, value):
            self.my_dict[key] = value
    
    my_dict_handle = MyDict.remote()
    
    @ray.remote
    def f(n, my_dict_handle):
        # do something and get key, value for my dict
        my_dict_handle.insert.remote(key, value)
    
    ...
    

    【讨论】:

    • 您好,谢谢。我确实需要添加到预先存在的值(即 my_dict[key] + 1),那么如何使用此方法完成此操作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多