我认为python.org上的一些多进程示例不是很清晰,很容易就会从错误的设计开始。这里是我制作的一个简单示例,帮助我开始一个项目:
import os, time, random, multiprocessing
def busyfunc(runseconds):
starttime = int(time.clock())
while 1:
for randcount in range(0,100):
testnum = random.randint(1, 10000000)
newnum = testnum / 3.256
newtime = int(time.clock())
if newtime - starttime > runseconds:
return
def main(arg):
print 'arg from init:', arg
print "I am " + multiprocessing.current_process().name
busyfunc(15)
if __name__ == '__main__':
p = multiprocessing.Process(name = "One", target=main, args=('passed_arg1',))
p.start()
p = multiprocessing.Process(name = "Two", target=main, args=('passed_arg2',))
p.start()
p = multiprocessing.Process(name = "Three", target=main, args=('passed_arg3',))
p.start()
time.sleep(5)
这应该在15秒内使用3个处理器。很容易修改为更多。也许这可以帮助调试您当前的代码,并确保您真正生成了多个独立进程。
如果由于RAM限制必须共享数据,则建议使用以下方法:
http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes
vmstat 1
工具,以查看您的bo
和bi
列是否接近磁盘容量限制或大部分时间低于磁盘带宽。 - sarnold