python - 如何使用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方式来实现相同的目的?
解决方案
您可以使用进程池来创建动态数量的进程,并将您的任务表示为适当分离的作业以分配工作:
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)
推荐阅读
- r - 根据 R 中的条件绘制网格并填充单元格
- php - 获取查询字符串值并传递给 JQuery
- ios - CoreBluetooth 功能在 Singleton 中不起作用
- anylogic - 代理 2D 未显示,3D 正常
- jquery - 使用 jQuery 和 ASP 中继器处理图像 onclick 事件
- momentjs - .weekday() 和 .format('d') 之间的 moment.js 区别
- android - 如何通过从资产中销毁和重新加载数据库来迁移 Room 数据库
- c++ - 如果有很多,带有 Pixmap 的 QtListWidgetItem 会崩溃
- javascript - 使用 javascript 在网页上模拟登录
- ftp - WinSCP - 重命名目录中的文件,禁止列出/浏览