等到任务用 Python 中的 Ray 完成
Posted
技术标签:
【中文标题】等到任务用 Python 中的 Ray 完成【英文标题】:Wait until tasks are finished with Ray in Python 【发布时间】: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 做到这一点?
【问题讨论】:
【参考方案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),那么如何使用此方法完成此操作?以上是关于等到任务用 Python 中的 Ray 完成的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中使用 Ray 并行化任务,得到“Aborted (core dumped)”
我如何才能等到我的 Android 应用程序中的协程作用域执行完成?
ThreadPoolExecutor 动态任务执行,等到所有任务完成