如何使用多进程python

#如何使用多进程
#由于python中全局解释锁(GIL)的存在,在任意时刻只允许一个线程在解释器中运行,
# 因此python的多线程不适合处理cpu密集型任务,想要处理cpu密集型任务,可以使用多进程模型
#解决方案:使用标准库中multiprocessing.Process,它可以启动子进程执行任务,操作接口,
# 进程间通信,进程同步等都与Threading.thread类似
'''如何使用它'''
from multiprocessing import Process
def d(s):
    print (s)
p=Process(target=f,args=('hello',))
p.start()
p.join()
x=1
def():
    global x 
    x=5
f()
'''进程间如何通信'''
from multiprocessing import Queue,Pipe
import Queue
q=Queue()
q.put(1)
q.get()
def f(q):
  print('start')
  print (q.get())
  print('end')
  
#启动一个子进程
Process(target=f,args=(q,)).start()
#pipe使用:会创建双向管道
c1,c2=Pipe()
c1.send('abc')#传入数据
c2.recv()#c2端读取出来
c2.send('xys')
c1.recv()

def f(c):
    c.send(c.recv()*2)
c1,c2=Pipe()
Process(target=f,args=(c2,)).start()
c1.send(55)
c1.recv()
#以多进程多线程执行一个Cpu任务,对比运行时间  
# 寻找水仙花数算法

#第一个函数判断某数是否水仙花数
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 range(a,b) if isArmstrong(k)]
    print ('%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 worker in workers:
        worker.join()
        
def findByProcess(*argslist):
    workers=[]
    for args in argslist:
        worker=Process(target=findArmstrong,args=args)
        workers.append(worker)
        worker.start()
    for worker in workers:
        worker.join()
        
if __name__=='__main__':
    import  time
    start =time.time()
    findByProcess((20000000,30000000),(25000000,30000000))
    #findByThread((20000000, 30000000), (25000000, 30000000))#多线程
    print(time.time()-start)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落雪snowflake

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值