python 8-6 如何使用多进程,使用标准库中的multiprocessing.Process,它可以启动子进程执行任务

8-6 如何使用多进程

解决方案:
使用标准库中的multiprocessing.Process,它可以启动子进程执行任务
操作接口,进程间通信,进程间同步都与threading.Thread类似

由于GIL 锁的存在,对于CPU 密集型的任务,python多线程发挥不出多cpu的优势

使用多进程,系统确实会生成两个进程,并且两个进程分别会去占用两个CPU,真正意义上实现多线程调度

from multiprocessing import Process
def f(s):
    print s
p = Process(target=f,args=('hello',))
p.start()

from multiprocessing import Queue,Pipe
q = Queue()
q.put(1)
q.get()
def f(q):
    print 'start'
    print q.get()
    print 'end'
Process(target=f,args=(q,)).start()
q.put(1000)


def f(c):
    c.send(c.recv() * 2)

c1,c2 =Pipe()
Process(target = f,args(c2,)).start()
c1.send(55)
c1.recv()


from threading import Thread
from multiprocessing import Process
def isArmStrong(n):
    a,t = [], n
    while t > 0:
        a.append(t % 10)
        t /= 10
    k = len(a)
    return sum(x ** k for x in a) == n

def findArmStrong(a,b):
    print a,b
    res = [ k for k in xrange(a, b) if isArmStrong(k)]
    print "%s - %s :%s"%(a,b,res)

def findByThread(*argslist):
    workers = []
    for args in argslist:
        worker = Thread(target = findArmStrong,args=args)
        workers.append(worker)
        worker.start()
    for t in workers:
        t.join()

def findByProcess(*argslist):
    workers = []
    for args in argslist:
        worker = Process(target=findArmStrong,args=args)
        workers.append(worker)
        worker.start()
        for work in workers:
            worker.join()

if __name__ == '__main__':
    import time
    start = time.time()
    findByProcess((20000000,25000000),(25000000,30000000))
    findByThread((20000000,25000000),(25000000,30000000))
    print time.time() - start     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值