как динамически создавать процесс с использованием Python - PullRequest
0 голосов
/ 03 июня 2018

Есть ли способ динамически генерировать процессы для обработки одного и того же пакета данных.

Допустим, я использую три разных аккаунта, чтобы общаться с одним и тем же роботом, я не могу придумать какой-либо удобный подход, поэтому я просто создаю процесс вручную

def chat(bot, query_list):
        for idx, query in enumerate(query_list):
            answer = bot.chat(query)
            print(answer)

#Let say there is a function called bot, parameter is account information
robot1 = bot(account1)
robot2 = bot(account2)
robot3 = bot(account3)

p1 = multiprocessing.Process(target=chat, args=(robot1, data[0],))
p2 = multiprocessing.Process(target=chat, args=(robot2, data[1],))
p3 = multiprocessing.Process(target=chat, args=(robot3, data[2],))


p1.start()
p2.start()
p3.start()

p1.join()
p2.join()
p3.join()
print('Done!')

Но этот способ является своего родапотому что я должен вручную создавать тонны процессов, если у меня есть тонны аккаунта.Так есть ли какая-либо функция или питонский способ достижения той же цели?

1 Ответ

0 голосов
/ 03 июня 2018

Вы можете использовать пул процессов для создания динамического числа процессов и представлять свои задачи как правильно разделенные задания для распределения работы:

from multiprocessing import Pool

# each entry of `job_list` contains all the information
# required to perform a single task.
job_list = [
    {
        "account": {
            "username": "john",
            "password": "qwerty"
        },
        "query": "How can I help you?"
    } # , ...
]

# function executed for each element of `job_list`
def run_job(job):
    print("account user name: {}".format(job["account"]["username"]))
    print("query: {}".format(job["query"]))
    # answer query here using account

with Pool(processes=4) as pool:
    pool.map(run_job, job_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...