具体思路跟把文件输出集中在一起也差不多,就是把进程需要写入文件的内容作为返回值返回给惠和的回调函数,使用回调函数向文件中写入内容。这样做在windows下面还有一个好处,在windows环境下,python的多进程没有像linux环境下的多进程一样,linux环境下的multiprocessing库是基于fork函数,父进程fork了一个子进程之后会把自己的资源,比如文件句柄都传递给子进程。但是在windows环境下没有fork函数,所以如果你在父进程里打开了一个文件,在子进程中写入,会出现ValueError: I/O operation on closed file这样的错误,而且在windows环境下最好加入if __name__ == '__main__'这样的判断,以避免一些可能出现的RuntimeError或者死锁。
下面是代码:
from multiprocessing import Pool
import time
defmycallback(x):with open('123.txt', 'a+') as f:
f.writelines(str(x))
defsayHi(num):return num
if __name__ == '__main__':
e1 = time.time()
pool = Pool()
for i in range(10):
pool.apply_async(sayHi, (i,), callback=mycallback)
pool.close()
pool.join()
e2 = time.time()
print float(e2 - e1)def log_result(res):
list=[]
f = open("out.csv", "a")
for k in res:
f.write(k+"\n")
f.close()
def getContenByUrl(url):
list=[]
file_object = open(url, 'r')
try:
for line in file_object.readlines():
list.append(line.strip('\n'))
finally:
file_object.close()
return list
if __name__ == '__main__':
print "test"
print map_route
get_map_route()
#print map_route
pool = Pool(processes=12)
list=getFileList(filefolder)
k=0
for file in list:
print file , k
k=k+1
pool.apply_async(readFileByFilename,(file,'type1'),callback = log_result)
#readFileByFilename(file)
pool.close()
pool.join()