繁体   English   中英

python multiprocess无法启动

[英]python multiprocess fails to start

这是我在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? '

然后我选择“是”,外壳关闭。

当我用'threading.Thread'替换Process时,将运行相同的代码,但输出如下:

Squared Squared Squared Squared Squared  0    1491625
36496481

在这方面有什么帮助吗? 预先感谢

要运行我的python代码,请使用Idlex IDE,然后从终端启动它。

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

稍加思考,我终于找到了问题所在。

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

要解决此问题,请使用collections模块中的deque(),甚至更好地使用“ Lock”功能。 deque()可用于数组,但它适用于相同类型的数组(非常类似于MATLAB数组),并且是线程/进程安全的。 “锁定”避免了比赛条件。

所以编辑将是:

def myfunc(num):

    lock.acquire()

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

    lock.release()

就这样。

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

将上面的代码保存到.py文件中,然后使用以下命令在gnome-terminal中运行它

python myfile.py

其中“ myfile.py”是您保存到的文件名。

我假设您正在使用的IDE被Process()弄糊涂了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM