我必须编写一些相当大的文件,我想在一个单独的线程中执行此操作(同时使用处理器和HDD)并且我想使用大小为4的工作池(因为除了写作之外还有其他操作,我认为4足以正确使用硬盘而不会堵塞它。)
这是我的代码(它什么都不做):
import os, os.path, multiprocessing
def asyncFileMake(e):
with open('files/file%d.txt'%e, 'w') as f:
print(os.path.dirname(os.path.abspath(os.getcwd())))
f.write("hi")
def writefile(e, pool):
pool.apply_async(asyncFileMake, [e])
if __name__ == "__main__":
if not os.path.exists('files'):
os.makedirs('files')
with multiprocessing.Pool(processes=4) as pool:
for e in range(10):
writefile(e, pool)
答案 0 :(得分:3)
这是一个受原始代码段启发的版本。我认为最重要的变化是函数传递到池的方式(map
而不是apply_async
,稍后会更多):
import os
import multiprocessing
def create_file(e):
with open('files/file%d.txt'%e, 'w') as f:
print f.name
f.write("hi")
if __name__ == '__main__':
if not os.path.exists('files'):
os.makedirs('files')
pool = multiprocessing.Pool(processes=4)
pool.map(create_file, range(10))
原始实现的问题是,pool.apply_async
返回AsyncResult
,您需要在其上调用get
,以便触发实际执行。我建议你仔细看看documentation of multiprocessing。特别是this part about pool workers。希望有所帮助。