Python-使用安全添加函数的多处理
我编写了代码,将每个数字加上3,并在多处理中返回它们。它似乎工作得很好,但我很好奇Cal.add函数是否以正确的方式使用。立即创建了cal类实例(由pid检查)。有没有办法在池创建的其他线程中使用相同的内存?没有,不要这样做。Python有GIL防止多个内核访问同一内存,从而避免内存泄漏。多处理旨在使用多个内核执行多个独立的任务,但仍遵循GIL。cal实例只创建一次,但通过fork,它会为每个工作人员复制。如果我在工作类中为每个工作实例创建cal实例,如“return cal().add(param)”,会怎么样。那还不安全吗?不,不要那样做。Python有GIL防止多个内核访问同一内存,从而避免内存泄漏。多处理旨在使用多个内核执行多个独立的任务,但仍遵循GIL。cal实例只创建一次,但通过fork,它会为每个工作人员复制。如果我在工作类中为每个工作实例创建cal实例,如“return cal().add(param)”,会怎么样。那还不安全吗?Python-使用安全添加函数的多处理,python,multiprocessing,Python,Multiprocessing,我编写了代码,将每个数字加上3,并在多处理中返回它们。它似乎工作得很好,但我很好奇Cal.add函数是否以正确的方式使用。立即创建了cal类实例(由pid检查)。有没有办法在池创建的其他线程中使用相同的内存?没有,不要这样做。Python有GIL防止多个内核访问同一内存,从而避免内存泄漏。多处理旨在使用多个内核执行多个独立的任务,但仍遵循GIL。cal实例只创建一次,但通过fork,它会为每个工作人员复制。如果我在工作类中为每个工作实例创建cal实例,如“return cal().add(par
import multiprocessing
import time
from multiprocessing import Pool
import os
class Cal:
def add( self, num):
added = num + 3
time.sleep(3)
print( str(os.getppid()) + " // " + str( num) + " -> " + str( added))
return added
class Worker:
def __init__( self, cal):
self.cal = cal
def run( self, param):
return cal.add( param)
cal = Cal()
def fun( num):
return Worker( cal).run( num)
cpuCount = multiprocessing.cpu_count()
with Pool( cpuCount) as p:
print( p.map(fun, range(50)))