编程语言
首页 > 编程语言> > python multiprocess无法启动

python multiprocess无法启动

作者:互联网

这是我在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()

就这样.

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

标签:python-idle,python,multithreading,multiprocessing
来源: https://codeday.me/bug/20191009/1878948.html