【发布时间】:2021-07-27 04:13:32
【问题描述】:
背景
我现在有一些看起来像这样的代码。
failed_player_ids: Set[str] = set()
for player_id in player_ids:
success = player_api.send_results(
player_id, user=user, send_health_results=True
)
if not success:
failed_player_ids.add(player_id)
此代码运行良好,但问题是每次调用需要 5 秒。每分钟有 2000 个呼叫的速率限制,所以我远远低于最大容量。我想并行化它以加快速度。这是我第一次在 python 中使用multiprocessing 库,因此我对应该如何进行有点困惑。我可以用语言描述我想做什么。
在我当前的代码中,我循环遍历 player_id 列表,如果 api 响应成功,我什么也不做,如果失败,我记下该玩家 ID。
我不确定如何实现此代码的并行版本。我有一些想法,但我有点困惑。
这就是我目前的想法
from multiprocessing import Pool
num_processors_to_use = 5 # This is a number can be increased to get more speed
def send_player_result(player_id_list: List[str]) -> Optional[str]:
for player_id in player_id_list:
success = player_api.send_results(player_id, user=user, send_health_results=True)
if not success:
return player_id
# Caller
with Pool(processes=num_processors_to_use) as pool:
responses = pool.map(
func=send_player_result,
iterable=player_id_list,
)
failed_player_ids = Set(responses)
任何 cmets 和建议都会有所帮助。
【问题讨论】:
-
@joanis 谢谢你的第一篇文章是一个很好的发现。如果您能用您的评论解释/纠正我在上面发布的答案,如果对您来说不太困难/耗时,我也将不胜感激。我觉得它可以帮助我更好地理解。
-
你写的东西实际上是做什么的?它是否有效?
-
PS:我还没有在 Python 中做过多处理器的事情,我只是意识到最近有一些关于它的问题。希望这里的其他人能够对您的代码发表评论,如果您指出它尚未以何种方式工作。
标签: python python-multiprocessing