Python process dictionary using multiprocessing[Python 3.7](使用多处理的Python进程词典[Python3.7])
本文介绍了使用多处理的Python进程词典[Python3.7]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是多处理的新手,我需要一些帮助来了解如何将当前代码转换为使用多处理,以便它可以更快地处理数据。我有以下数据
accounts = [{'Id': '123', 'Email': 'Test_01@gmail.com', 'Status': 'ACTIVE'},
{'Id': '124', 'Email': 'Test_02@gmail.com', 'Status': 'ACTIVE'},
{'Id': '125', 'Email': 'Test_03@gmail.com', 'Status': 'ACTIVE'}]
我需要处理的代码,目前我正在使用for循环来处理它,运行得很好,但需要更长的时间,这是我想要优化的,代码如下所示-
dl_users = {}
group_users = {}
for a in accounts:
if a['Status'] == 'ACTIVE':
dl_users[a['Email']] = get_dl_users(a['Email'])
group_users[a['Email']] = get_group_users(a['Id'])
print(dl_users)
print(group_users)
我不想使用for循环,而是希望并行填充dl_users
和group_users
数据,以便在数据大量时可以快速处理,我看到了几个例子,并尝试使用并发lib,但由于缺乏多处理知识,我一直在努力工作,任何帮助/指导都将非常感谢。
推荐答案
多处理派生多个Python进程作为辅助进程。因此,一个进程中的代码无法访问或修改另一个进程中的变量。它们完全分开,彼此隔绝。有三种方法可以解决此问题:
- 您可以使用multiprocessing
Pipe
orQueue
将数据从工作进程传递回主进程。您不能直接添加到字典中,但可以将单个条目作为PICKED数据传回,并让主线程取消PICKE数据的PICKE并将其存储在字典中。或者,您可以在每个进程中构建单独的词典,并在结束时将它们全部发送回合并。 - 您可以使用
threading
而不是multiprocessing
。线程在很大程度上类似于多处理,只是它在同一个Python解释器中的不同线程中运行其工作者,而不是在不同的解释器中运行。这意味着您可以访问全局共享变量。通常,threading
很慢,因为Python一次只能运行一个线程(查看Global Interpreter Lock了解更多信息)。但是,在这种情况下,看起来线程将花费大部分时间等待get_dl_users
和get_group_users
(我假设它们是网络或数据库操作),因此您可以从多线程中获得很多好处。 - 如果您主要在等待IO操作,则可能根本不需要线程。您可以只使用Python
async
。这允许您在其余代码继续运行的同时异步运行IO操作。特别是,您可以使用asyncio.wait
like this并行运行所有IO操作。
这篇关于使用多处理的Python进程词典[Python3.7]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:使用多处理的Python进程词典[Python3.7]
基础教程推荐
猜你喜欢
- 症状类型错误:无法确定关系的真值 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01