如何在 python 进程中获取多处理数组
How to get multiprocessing Array in python process
我想在每个进程中访问此处的 "gs" 变量。我如何从进程中引用 initargs?
# file exec.py
import time
import os
import random
def f(letter):
sleep_time = random.randint(3, 20)
pid = os.getppid()
g_id = # gs.pop() (how to access gs?)
print('-------\nsleep: {}\npid: {}\nletter: {}'.format(sleep_time, pid, letter))
time.sleep(sleep_time)
print('===========\n{} ended\n==========='.format(letter))
# gs.add(g_id) (return g_id so it can be used by others)
return letter
这是主文件:
from multiprocessing import Pool, TimeoutError, Array
# file main.py
if __name__ == '__main__':
gs = Array('B', [66, 67, 68, 69], lock=False)
pool = Pool(processes=4, initargs=(gs, ))
hopts = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
pool.map(f, hopts)
您缺少的关键是您需要使用 pool
的 initializer 参数。这个 是一个很好的例子,说明了如何实现这一点以及 为什么 你需要那样做。
以下是将此类工作流程应用于您的问题的示例:
from multiprocessing import Pool, Array
import time
import os
import random
def f(letter):
sleep_time = random.randint(3, 20)
pid = os.getppid()
g_id = gs[0]
print('-------\nsleep: {}\npid: {}\nletter: {}'.format(sleep_time, pid, letter))
time.sleep(sleep_time)
print('===========\n{} ended\n==========='.format(letter))
# gs.add(g_id) (return g_id so it can be used by others)
return letter
def init(local_gs):
global gs
gs = local_gs
if __name__ == '__main__':
gs = Array('B', [66, 67, 68, 69], lock=False)
pool = Pool(initializer=init, initargs=(gs,))
hopts = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
pool.map(f, hopts)
(我不确定你的最终目标到底是什么,所以我尽量少修改。)
我想在每个进程中访问此处的 "gs" 变量。我如何从进程中引用 initargs?
# file exec.py
import time
import os
import random
def f(letter):
sleep_time = random.randint(3, 20)
pid = os.getppid()
g_id = # gs.pop() (how to access gs?)
print('-------\nsleep: {}\npid: {}\nletter: {}'.format(sleep_time, pid, letter))
time.sleep(sleep_time)
print('===========\n{} ended\n==========='.format(letter))
# gs.add(g_id) (return g_id so it can be used by others)
return letter
这是主文件:
from multiprocessing import Pool, TimeoutError, Array
# file main.py
if __name__ == '__main__':
gs = Array('B', [66, 67, 68, 69], lock=False)
pool = Pool(processes=4, initargs=(gs, ))
hopts = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
pool.map(f, hopts)
您缺少的关键是您需要使用 pool
的 initializer 参数。这个
以下是将此类工作流程应用于您的问题的示例:
from multiprocessing import Pool, Array
import time
import os
import random
def f(letter):
sleep_time = random.randint(3, 20)
pid = os.getppid()
g_id = gs[0]
print('-------\nsleep: {}\npid: {}\nletter: {}'.format(sleep_time, pid, letter))
time.sleep(sleep_time)
print('===========\n{} ended\n==========='.format(letter))
# gs.add(g_id) (return g_id so it can be used by others)
return letter
def init(local_gs):
global gs
gs = local_gs
if __name__ == '__main__':
gs = Array('B', [66, 67, 68, 69], lock=False)
pool = Pool(initializer=init, initargs=(gs,))
hopts = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
pool.map(f, hopts)
(我不确定你的最终目标到底是什么,所以我尽量少修改。)