0

我想并行发出 http 请求,这是我的代码(骨架)在使用 ray 时的样子:

@ray.remote
def issue_request(user_id):
    r = requests.post(url , json, headers)

 ray.get([issue_request.remote(id_token[user_id]) for _ in range(500)])

与以下相比,它的运行速度要慢得多:

def issue_request(user_id):
    r = requests.post(url , json, headers)

jobs = []
for i in range(500):
    process = multiprocessing.Process(target=issue_request,
                                  args=(admin_id))
jobs.append(process)
for j in jobs:
    j.start()

# Ensure all of the processes have finished
for j in jobs:
    j.join()

这台机器有两个核心,似乎 ray 只启动了两个进程来处理 500 个请求。有人可以告诉我如何告诉 ray 每个请求启动 1 个工作人员/进程吗?

4

1 回答 1

2

您可以ray.init(num_cpus=10)告诉 Ray 同时安排最多 10 个任务。在https://ray.readthedocs.io/en/latest/resources.html有更多关于 Ray 资源的信息。

默认情况下,Ray 将使用类似os.cpu_count().

同时启动 500 个进程可能过多。在多处理情况下,进程一旦完成就会退出,因此您可能永远不会同时有 500 个左右。

于 2019-05-16T15:43:44.187 回答