参考:http://www.cnblogs.com/virusolf/p/5458325.html
最近项目中用到了多进程和多线程的知识,花费了比较多的时间,在此进行总结,方便之后查阅。
经过查阅资料,知道,多进程指的是真正的并行运行,即各个进程之间互不干扰,我们通常所提到的多核就与多进程有关。而多线程就具有一定的局限性,多线程共享同一份资源,并不是真正意义上的并行运行,而是每个线程运行一小会,交替运行,这样给我们的感觉就像是并行运行一样。
对于多进程,要了解Pool这个概念,就是进程池,在这个进程池里,可以包含多个进程,不过这个最大数量是受到限制的。可以在使用之前确定最大进程数:
p =
Pool(processes=4)
在进程中调用函数:
p.apply_async(sayHi,args=(m,))
要在进程中对某个数值进行修改,可以使用列表List,或者队列Queue,List可以随意存取,Queue遵循先进先出的原则,所以存取比较麻烦。
我在具体的应用中用到的是list,注意这块需要用到的是Manager这个函数,如果没有使用的话可能不会修改具体的数值。
具体使用方法:
From multiprocessing import Manager
manager = Manager()
l1 = manager.list()
p.apply_async(start_read,args=(l1,))//注意这块还有个逗号
time.sleep(0.5)
p.close()
p.join
由于我的start_read函数是一个死循环,因此需要强制停止:
p.terminate()
如果需要通过进程函数来修改列表的值,注意将列表作为参数传入到函数中,进行修改。
目前接触的就这么多,后续再进行补充。