如何在multiprocessing.Pool
中为每个进程设置精美程度?我知道我可以使用os.nice()
增加美感,但是创建池后如何在子进程中调用它呢?如果我在映射函数中调用它,则函数每次执行时都会被调用,而不是在进程进行 fork 时被调用。
import multiprocessing as mp
NICENESS = 19
DATA = range(100000)
def foo(bar):
return bar * 2
pool = mp.Pool(100)
# Somehow set niceness of each process to NICENESS
pool.map(foo, DATA)
最佳答案
那用一个初始化器呢? https://docs.python.org/2/library/multiprocessing.html#module-multiprocessing.pool
我相信该函数在池启动时会被调用一次,而且我猜想初始化器中的os.nice()调用之后应该对过程起作用。
我添加了一些其他语句来表明它可以在您的worker函数中使用,但是显然您应该删除os.nice()调用,因为您需要一个静态的niceness值。
import multiprocessing as mp
import os
NICENESS = 3
DATA = range(6)
def foo(bar):
newniceness = os.nice(1) # remove this
print('Additional niceness:', newniceness) # remove this
return bar * 2
def set_nicesness(val): # the initializer
newval = os.nice(val) # starts at 0 and returns newvalue
print('niceness value:', newval)
pool = mp.Pool(3, initializer=set_nicesness, initargs=(NICENESS,))
# Somehow set niceness of each process to NICENESS
pool.map(foo, DATA)
从打印品中您可以看到,精美度现在从3开始(我已经将其设置为NICENESS),并从那里开始递增。
关于python - 在多处理中设置每个流程的精细度。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59579859/