multiprocessing python多进程模块, 于是, Processing也是多进程的宠儿. 但今天讨论的问题, 似乎也能引起我们一番重视
直接上代码:
from multiprocessing import Process, Lock
err_file = 'error1.log'
err_fd = open(err_file, 'w')
def put(fd):
print "PUT"
fd.write("hello, func put write\n")
print "END"
if __name__=='__main__':
p_list=[]
for i in range(1):
p_list.append(Process(target=put, args=(err_fd,)))
for p in p_list:
p.start()
for p in p_list:
p.join()
上面的代码意图很清晰: 通过multiprocessing.Process派生一个进程, 去执行put函数, put函数的作用也是很清楚, 输出PUT和END, 并且将”hello, func put write” 写到文件error1.log中.
那么按理说, 输出应该如同上面说的那样, PUT和END,然后error1.log将有那句话”hello, func put write”, 然而, 世事总有那么点难料的, 代码执行结果是:
[root@iZ23pynfq19Z ~]# py27 2.py ; cat error1.log
PUT
END
[root@iZ23pynfq19Z ~]#
what!? 为什么error1.log没东西 !?
让我们稍微调整下代码, 再见证神奇的事情:
from multiprocessing import Process, Lock
err_file = 'error1.log'
err_fd = open(err_file, 'w')
def put(fd):
print "PUT"
fd.write("hello, func put write\n")
fd.write("o" *