与python多重处理相比,Python ray代码的工作速度更慢

时间:2019-05-16 07:25:06

标签: python python-multiprocessing ray

我想并行发出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个工作进程吗?

1 个答案:

答案 0 :(得分:0)

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

默认情况下,Ray会使用os.cpu_count()之类的方法推断出内核数。

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