【问题标题】:use multiprocessing pool to call a method of a class which has parametrized constructor使用多处理池调用具有参数化构造函数的类的方法
【发布时间】:2020-09-25 09:29:54
【问题描述】:

如何使用多处理池调用具有参数化构造函数的类的方法? 下面是我的示例程序。这里我需要使用工作进程池并行执行obj.api_call() 方法。

import requests


class A:
    def __init__(self, user):
        self.user = user

    def api_call(self):
        url = "http://eample.com?name=" + self.user
        print(url)
        res = requests.get(url)
        print(res)


name_list = ['ram', 'krish', 'shiv', 'david', 'rahul', 'gopal', 'vijay', 'sati']
for name in name_list:
    obj = A(name)
    obj.api_call()

【问题讨论】:

  • 你的问题有点误导。 参数化构造函数 会导致人们假设您在询问generics in Python,但事实并非如此。

标签: python parallel-processing multiprocessing


【解决方案1】:

一种简单的方法是创建一个处理实例化和调用的函数:

def mp_func(user):
    a = A(user)
    a.api_call()

并在您的池中调用该函数。

如果你真的想让它与你的类中的一个函数一起工作,也许你可以使用一个类方法:

class A(object):
    def __init__(self, user):
        self.user = user

    def api_call(self):
        print(self.user)

    @classmethod
    def mp_create_and_call(cls, user):
        newcls = cls(user)
        newcls.api_call()

import multiprocessing as mp
pool = mp.Pool(4)
usernames = ['a', 'b', 'c'] * 20
pool.map(A.mp_create_and_call, usernames)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多