python-3.x 将线程转换为多进程池

u2nhd7ah  于 2022-11-19  发布在  Python
关注(0)|答案(1)|浏览(217)

基本上我现在有一个线程代码,但我希望尝试转换为多处理池来测试性能

user_dict = {
            'users': [
                {
                    'username': 'test1',
                    'password': 'opop1',
                },
                {
                    'username': 'test2',
                    'password': 'opop2',
                }
            ]
        }

        thread_list = []
        for user in user_dict['users']:

            ct = threading.Thread(
                target=task,
                args=(
                    some_object,
                    some_other_object,
                    another_object,
                    user['username'],
                    user['password']
                )
            )
        ct.start()
        thread_list.append(ct)

        for thread in thread_list:
            thread.join()

我任务函数将基于每个用户的用户名和密码进行一些登录,并继续分配一些信息以调用API端点来获取数据并写入JSON文件。
但是我不知道如何将其转换为多处理池,因为我不确定如何传递user_dict和其他对象信息。

4xrmg8kj

4xrmg8kj1#

你可以创建一个Pool,并在starmap的列表中输入你的函数和参数。

from multiprocessing import Pool

user_dict = {
            'users': [
                {
                    'username': 'test1',
                    'password': 'opop1',
                },
                {
                    'username': 'test2',
                    'password': 'opop2',
                }
            ]
        }

def task(usr, pwd):
    print(usr, pwd, sep=", ")
    return (usr,pwd)

if __name__ == '__main__':
    pool = Pool(processes=len(user_dict['users']))
    results = pool.starmap(task, [tuple(el.values()) for el in user_dict['users']])

results包含每个池成员的所有返回值:

[('test1', 'opop1'), ('test2', 'opop2')]

相关问题