‘壹’ 请教python的并行multiprocessing
如果不是你pool.colse()打错了的关系, (正确的应该是 pool.close())
那就应该是你IDE 的关系吧, 我在IDLE上执行你的代码,没有问题.
还有顺便打个广告,我优酷上(搜 "莫烦 multiprocessing")有关于multiprocessing的教程,有可能会对你有用.
‘贰’ 怎么让 python 多路并行执行
dispy 是一个 Python 的分布式并行计算框架。可在单台机器上多个处理器进行并行处理,也可在多机集群环境下使用。
‘叁’ python是串行还是并行
串行,因为python是逐句编译的
‘肆’ Python如何实现并行的多线程
Python中使用线程有两种方式:函数或者用类来包装线程对象。函数式:调用thread模块中的start_new_thread()函数来产生新线程。线程模块:Python通过两个标准库thread和threading提供对线程的支持。
‘伍’ Python进程之并行与并发的区别
并行 :
当系统有一个以上CPU时,则进程的操作有可能非并发。当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行。
并发 :
当有多个进程在操作时,如果系统只有一个CPU,则它根本不可能真正同时执行一个以上的进程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个进程执行,在一个时间段的进程代码运行时,其它进程处于挂起状,这种方式我们称之为并发。
区别:
并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻同时执行,而并发是指两个或多个事件通过时间片轮流被执行。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单核CPU中,同一时刻仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机中有多个CPU,则这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序,这样,多个程序便可以同时执行。
相关推荐:《Python视频教程》
进程的状态如下图所示
在了解其他概念之前,我们首先要了解进程的几个状态。在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞。
(1)就绪(Ready)状态
当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
(2)执行/运行(Running)状态当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。
(3)阻塞(Blocked)状态正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。
相关推荐:
一文带你读懂Python中的进程
‘陆’ Python进程之串行与并行
串行和并行
串行指的是任务的执行方式。串行在执行多个任务时,各个任务按顺序执行,完成一个之后才能进行下一个。(早期单核CPU的情况下)
并行指的是多个任务在同一时刻可以同时执行(前提是多核CPU),不需要等待。
同步和异步
所谓同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。要成功都成功,失败都失败,两个任务的状态可以保持一致需要等待、协调运行。
所谓异步就是彼此独立的,分配任务后,不需要等待该任务的执行结果,继续做自己的事,无论被分配的任务是执行成功还是失败都是不关心的,只要自己完成了整个任务就算完成了。至于其它任务是否真正完成无法确定,所以它是不可靠的任务序列。
相关推荐:《Python视频教程》
小结:
1、串行和同步的区别:串行指的是在早期单核CPU时,一台电脑在同一时刻只能执行一个程序,如果想要运行另一个程序需要关闭当前程序,才能执行下一个程序,是针对多个程序来说的。同步指的是在一个程序中同一时刻只能执行一个任务。是针对一个程序中多个进程或多个线程来说的。
所以两者有着本质上的区别。串行是针对多个程序,同步是针对一个程序内部的多个进程或多个线程的。
2、并行和异步的区别:并行指的是多核CPU,在同一时刻可以执行多个程序。异步指的是在同一个程序内可以执行多个进程或者多个线程。
两者本质上的区别就是并行指的是多个程序,异步指的是一个程序内部的多个进程和多个线程。
3、并行和并发的区别:并行和并发都是指多个程序,但不同的是并行在同一时刻可以同时执行多个任务,而并发在同一时刻只能执行一个任务,通过多道技术在空间上可以开启多个程序,在时间上通过时间片的方式轮询多个程序,从用户的角度来看实现了多个程序同时执行的伪并行,从CPU的角度同一时刻它只能执行一个程序,所以说他是串行的,只不过是由于CPU切换速度太快我们无法从表面看出来而已。
并行是真正的同一时刻执行多个程序,并发是通过时间轮询的方式实现了伪并行。
阻塞与非阻塞:
阻塞:只要是涉及到I/O操作或者网络请求的都属于阻塞如read,recv,accept。
非阻塞:只要不涉及到I/O,网络请求的在内存中可以直接计算的就是非阻塞,例如:list.append(8),dict["a"]=1就是非阻塞。
相关推荐:
Python进程之并行与并发的区别
‘柒’ 用GPU做python程序并行到底用什么好
因为我的程序中需要并行的是优化计算的evaluation部分,所以如果能够找到一些支持并行优化的库就可以。 从python官网上,可以找到一个DEAP库(git上有),利用map进行并行计算。 这个库的优点是,documents和例子是非常详细的。
‘捌’ python能多核并行吗
可以的,使用多进程就行
importmultiprocessingasmp
importtime
deffoo_pool(x):
time.sleep(2)
returnx*x
result_list=[]
deflog_result(result):
#Thisiscalledwheneverfoo_pool(i)returnsaresult.
#result_,notthepoolworkers.
result_list.append(result)
defapply_async_with_callback():
pool=mp.Pool()
foriinrange(10):
pool.apply_async(foo_pool,args=(i,),callback=log_result)
pool.close()
pool.join()
print(result_list)
if__name__=='__main__':
apply_async_with_callback()
‘玖’ python 多线程为什么没有并行
1. GIL是什么?
GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定。
2. 每个CPU在同一时间只能执行一个线程
在单核CPU下的多线程其实都只是并发,不是并行,并发和并行从宏观上来讲都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。
‘拾’ python怎样实现真正并行
并发:就是同时做多件事情。例如:终端用户程序利用并发功能,在输入数据的同时响应用户输入。服务器利用并发,在处理第一个请求的同时响应第二个请求。只要你希望程序同时做多件事情,就需要并发。很多人看到“并发”就会想到“多线程”,其实他们是有区别的。多线程只是并发的一种形式,但不是唯一形式并行:就是把正在执行的大量任务分割成小块,分配给多个同时运行的线程。一般情况下,为了让CPU充分利用,并行处理都会采用多线程。所以说:并行处理是多线程的一种,而多线程是并发的一种。还有一种非常重要但很多人不熟悉的并发类型:异步编程,它也是并发的一种形式。