python多进程并行没起作用_Python之多进程&异步并行

由于python的gil,多线程不是cpu密集型最好的选择

多进程可以完全独立的进程环境中运行程序,可以充分的利用多处理器

但是进程本身的隔离带来的数据不共享也是一个问题,而且线程比进程轻量

importmultiprocessingimportdatetimedefcalc(i):

sum=0for _ in range(1000000000):

sum+=1

print(i,sum)if __name__ == '__main__':

start=datetime.datetime.now()

ps=[]for i in range(5):

p= multiprocessing.Process(target=calc,args=(i,))

ps.append(p)

p.start()for p inps:

p.join()

delta= (datetime.datetime.now()-start).total_seconds()print(delta)

注意多进程的代码一定要在__name__='__main__'下面执行

pid 进程id

exitcode 进程退出的状态码

terminate() 终止指定的进程

进程间同步:

multiprocessing还提供了共享内存,服务器进程来共享数据,还提供了queue队列,pipe管道用于进程间通信

通讯方式不同:

1多进程就是启动多个解释器进程,进程间通信必须序列化,反序列化

2.数据的线程安全性问题<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的多进程并行可以很大程度上提高程序的执行效率和速度。下面是一个简单的例子,演示了使用多进程并行和单进程执行同一个任务所需的时间对比: ``` import time import multiprocessing # 任务函数 def task(num): time.sleep(1) return num*num # 单进程执行 start_time = time.time() results = [] for i in range(10): results.append(task(i)) end_time = time.time() print("单进程执行时间:", end_time - start_time) # 多进程并行执行 start_time = time.time() pool = multiprocessing.Pool(processes=4) # 创建进程池,最大进程数为4 results = [pool.apply_async(task, (i,)) for i in range(10)] # 在进程池中异步执行任务 pool.close() pool.join() end_time = time.time() print("多进程并行执行时间:", end_time - start_time) ``` 在这个例子中,我们定义了一个任务函数task,这个函数接收一个参数num,执行一个简单的计算任务,并返回计算结果。我们首先使用单进程执行这个任务,并记录执行时间。然后,我们使用多进程并行执行同样的任务,并记录执行时间。在多进程并行执行时,我们使用了multiprocessing库中的Pool类来创建进程池,并使用apply_async方法在进程池中异步执行任务。 我们可以运行这段代码,得到输出结果。一般来说,多进程并行执行的时间会比单进程执行的时间更短,可以看到在这个例子中,多进程并行执行的时间要比单进程执行的时间快了很多。但是需要注意的是,并不是所有的任务都适合使用多进程并行,有时候多进程并行执行的效率反而会变得更低。因此,在实际的应用中,需要根据具体的情况选择是否使用多进程并行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值