我有一个函数,我想并行计算多个值,对于每个计算,我想将输出保存到它自己的文件中。
我目前正在尝试使用多处理包以使其成为并行进程,但我是使用它的新手,也许我没有正确使用它。(我不确定池与进程类的使用(另外,我知道如何使用下面的 bash 命令打印我的输出。这本质上是一个关于如何实现并行计算并将结果输出到 txt 文件的问题。
这是我目前正在处理的一个玩具示例: 我将此功能保存在一个名为 test.py 的文件中
def fcn(n):
c = int(n*(n-1)/2)
print('My output will print several things like this code')
print(c)
return
通常当我将函数的输出写入文件时,我使用 bash 命令
python test.py > output.txt
对于并行计算,我拥有的示例代码会将每个输出写入列表中的元素,但它不会将输出写入文件,这是我想要的。(如果我将所有输出存储为这样的列表元素,我的实际问题将大量存储在内存中。我希望它只写入文件并继续进行下一次计算(
import multiprocessing as mp
pool = mp.Pool(mp.cpu_count())
results = [pool.apply(fcn,args = n, for n in range(6)]
pool.close()
我想要的输出是 6 个不同的 txt 文件,每个文件的输出为 fcn(n( 的 n=0,1,2,3,4,5。我希望以输入命名的每个文件,例如 0.txt,1.txt 等,如果可能的话。任何见解将不胜感激!
为了简单起问:...想要将输出保存到自己的文件中。
见,让我们做简单和更安全的事情:
给定任务,每个正在运行的进程都独立于任何其他进程,并且具有自己的、独占拥有的文件 I/O,指向"私有"、编号或其他差异化文件。
只是可以添加一些 SLOC-s,使用with
... as aFile:
上下文封闭的文件 I/O,并且很可能是一些try:/except:/finally:
处理部分,以防动态发生错误:
def fcn( n ):
try: #.________
with open( "aFileFromPROC[{0:}].txt".format( n ), "w" ) as aF: #| context
...do.whatever.needed... # aF #|
aF.write(...) # aF #|
...do.whatever.needed... # aF #|
aF.write(...) # aF #|
...do.whatever.needed... # aF #|
aF.write(...) # aF #|
pass # aF #|________
except:
...
finally:
...
return
在这里查看我的回复:熊猫数据帧写入 Excel 工作表的多处理
这个想法是通过multiprocessing.Queue
创建编写器工作线程和管道结果。(当您想将所有响应放在单个非平凡的文件格式(如 excel(中时,需要这个想法(
另一种解决方案是写入单独的文件:
def fcn(n):
c = int(n*(n-1)/2)
with open("file{}.txt".format(n), 'w') as ff:
ff.write('My output will print several things like this coden')
ff.write(str(c)+'n')
return