gpt4 book ai didi

python多进程启动失败

转载 作者:太空宇宙 更新时间:2023-11-03 18:39:47 29 4
gpt4 key购买 nike

这是我在 python 中执行简单多处理任务的代码

from multiprocessing import Process

def myfunc(num):

tmp = num * num
print 'squared O/P will be ', tmp
return(tmp)


a = [ i**3 for i in range(5)] ## just defining a list

task = [Process(target = myfunc, args = (i,)) for i in a] ## creating processes

for each in task : each.start() # starting processes <------ problem line

for each in task : each.join() # waiting all to finish up

当我运行此代码时,它会在某个点挂起,因此为了识别它,我在 python shell 中逐行运行它,发现当我调用“each.start()”时,shell 会弹出一个对话框,如下所示:

" The program is still running , do you want to kill it? '

然后我选择"is",shell 将关闭。

当我用“threading.Thread”替换 Process 时,相同的代码会运行,但输出是无意义的:

Squared Squared Squared Squared Squared  0    1491625
36496481

这方面有什么帮助吗?提前致谢

为了运行我的 python 代码,我使用 Idlex IDE 并从终端启动它。

我有 4 核/8 线程的 Intel Xeon 处理器和 8GB RAM

最佳答案

经过一番思考,我终于找到了问题所在。

发生这种情况是因为在Python中,float和int对象不是“线程安全”的,这意味着一个线程/进程分配用于计算任何函数值的内存可以被另一个线程/进程覆盖,因此它们显示荒谬的值。这称为竞争条件。

要解决此问题,请使用集合模块中的 deque(),或者更好的是使用“锁定”功能。 deque() 适用于数组,但它适用于同类数组(很像 MATLAB 数组),并且是线程/进程安全的。 “锁定”避免竞争条件。

所以编辑将是:

def myfunc(num):

lock.acquire()

.......some code .....
.......some code......

lock.release()

仅此而已。

但是一个问题仍然存在,那就是多处理模块。即使在调用“lock”之后,问题中提到的问题仍然存在。

关于python多进程启动失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20760876/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com