python - 将多处理输出附加到 Python 中的数据框
问题描述
我有两个在 Python 中使用多处理运行的函数。我在下面给出了一个示例(为简单起见,减少了功能代码)。我想将这两个函数的输出附加到一个数据框中并存储到“df”中。
import multiprocessing
def uttar_pradesh():
up=pd.DataFrame({'date':'01-09-2020','time':'00:00:00','demand':6577,'state':"Uttar Pradesh"})
return up
def andhra_pradesh():
ap=pd.DataFrame({'date':'01-09-2020','time':'00:00:00','demand':3797,'state':"Andhra Pradesh"})
return ap
if __name__ == "__main__":
df = []
p1 = multiprocessing.Process(target=uttar_pradesh )
p2 = multiprocessing.Process(target=andhra_pradesh)
df.append(p1)
df.append(p2)
p1.start()
p2.start()
p1.join()
p2.join()
print(df)
解决方案
只是multiprocessing.Process()
不会给你任何结果值,它只是在其他进程中运行函数。
假设您可以将函数重写为表单
def get_state_data(state):
return data_for_that_state
(为什么你不能),
然后,您可以将更高级别Pool
与map
(或imap
或imap_unordered
)一起使用:
states = ["uttar_pradesh", "andhra_pradesh"]
with multiprocessing.Pool() as p:
for result in p.map(get_state_data, states):
pass # append the result data or do whatever with it
如果你不想使用 Pool 和 map,你也可以设置一个multiprocessing.Queue()
传递给子进程并读取它,但它的工作量更大。
推荐阅读
- java - 从 AdapterClass 调用另一个 AdapterClass 的方法
- javascript - Mongoose 获取本地化多语言
- scapy - 指定 MTU 值
- php - 谁能指定我为什么这个 php 代码没有显示任何输出?有什么错误吗?
- postman - Postman Pre-request Script:需要生成随机DOB(18岁以上)
- javascript - 当另一个完成时播放下一个按钮 iframe src
- python - 当用户输入 0 时,如何将用户输入的所有值汇总为代码末尾的列表?
- c# - SqlConnection/SqlCommand 在 Close 和 Dispose 后保持数据库处于使用状态
- elasticsearch - ElasticSearch 动态键/值映射
- python - 为什么我在使用 pip (Windows 10) 安装插件后看不到 spyder-terminal?