python - 单个输出文件 (CSV) 的 Python 多处理
问题描述
我正在寻找 Python 中 MultiProcessing 的一些很好的示例代码,这些代码将接收一个大数组(分成同一主数组的不同部分)以加快后续输出文件的处理。我注意到还有其他的东西,比如 Lock() 函数,以确保它以特定的顺序返回,但不是一个很好的例子,说明如何在作业运行时返回结果数组,以便我可以输出单个 CSV 文件以正确的时间序列顺序。
以下是到目前为止我一直在处理队列的内容。如何分配 q1.get() 或其他人的结果以便以后重新组合?当我尝试使用 temp = q1.get()... 分配它时,它只是旋转... 并且拆分数组,将其发送到多个进程,然后重新组合所调用函数的结果的良好示例将不胜感激。我正在使用 Python 3.7 和 Windows 10。
import time
import multiprocessing
from multiprocessing import Process, Queue
def f1(q, testArray):
testArray2 = [[41, None, 'help'], [42, None, 'help'], [43, None, 'help']]
testArray = testArray + testArray2
q.put(testArray)
def f2(q, testArray):
#testArray.append([43, None, 'goodbye'])
testArray = testArray + ([44, None, 'goodbye'])
q.put(testArray)
return testArray
if __name__ == '__main__':
print("Number of cpu : ", multiprocessing.cpu_count())
testArray1 = [1]
testArray2 = [2]
q1 = Queue()
q2 = Queue()
p1 = multiprocessing.Process(target=f1, args=(q1, testArray1,))
p2 = multiprocessing.Process(target=f2, args=(q2, testArray2,))
p1.start()
p2.start()
print(q1.get()) # prints whatever you set in function above
print(q2.get()) # prints whatever you set in function above
print(testArray1)
print(testArray2)
p1.join()
p2.join()
解决方案
我相信您的所有流程只需要一个队列。队列是为进程间通信而设计的。
对于排序,您可以传入进程 ID 并在结果连接后根据该 ID 进行排序。或者您可以按照 furas 的建议尝试使用多处理池。
这听起来像是一个更好的方法。工作池通常会预先分配一个工作池,然后在该池上运行一组作业。这更有效,因为进程/线程最初设置并用于作业。您的实施将在哪里创建每个作业/功能的过程,这取决于您处理的数据量是昂贵的。
推荐阅读
- python - Flask 应用程序未加载(等待主机)
- postgresql - postgresql 11中的复制槽内存不足错误
- command-line-arguments - 如何将 raku -e 和 -n 与多个文件 glob 一起使用
- tensorflow - 使用 tf-agents 的上下文多武装老虎机的完整示例
- java - 当其内容更改时,使状态修剪栏贡献增加
- python - 如何使 HTML 中的默认文本输入值成为多字 Python 变量?
- amazon-web-services - 如何将 CloudWatch 警报配置为每 X 分钟评估一次
- python - 如果 col 为空字符串,则将相邻列也设为空
- javascript - 如何使用浏览器端 javascript 将具有编码高度值的 32 位 RGB png 转换为 16 位 png?
- sql - 如何连接三个表并将空白字段设置为空?