首页 > 解决方案 > 如何使用python动态创建进程

问题描述

有没有办法动态生成处理同一批数据的进程。

假设我使用三个不同的帐户与同一个机器人聊天,我想不出任何方便的方法,所以我只是手动创建进程

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!')

但是这种方式有点僵硬,因为如果我有大量的帐户,我必须手动创建大量的进程。那么是否有任何功能或pythonic方式来实现相同的目的?

标签: pythonmultithreadingprocessmultiprocessing

解决方案


您可以使用进程池来创建动态数量的进程,并将您的任务表示为适当分离的作业以分配工作:

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)

推荐阅读