多进程中的多进程



例如。我有一个控制器脚本。我有一个工人脚本。我有50个python对象,这些对象必须传递给worker脚本。我希望它们并行运行。

工作脚本有自己的一些数据库获取的并行化。这是我通过以下方式实现的:

p = Pool(processes=NUM_PROCS)
results = p.starmap(db_fetch, db_fetch_arguments)
p.close()
p.join()

最python的方式是,我可以将我的50个参数(python对象,而不是字符串参数)传递给我的工作进程,并使其并行运行,当工作进程试图生成更多的子进程时,不会出现任何问题。

提前谢谢。

编辑1:

from multiprocessing import Pool
import os
def worker(num:int):
num_list = list(range(num))
# print('worker start')
with Pool() as p:
p.map(printer, num_list)

def printer(num:int):
# print('printer')
print(f"Printing num {num} - child: {os.getpid()} - parent: {os.getppid()}")

if __name__ == '__main__':
with Pool(4) as controller_pool:
controller_pool.map(worker, [1,2,3])
print('here')

这里我得到了错误:断言错误:守护进程不允许有子

使用concurrent.futures中的ProcessPoolExecutor作为我的控制器外池。在内部,我使用了正常的多处理。池

谢谢。

from multiprocessing import Pool
from concurrent.futures import ProcessPoolExecutor
import os
def worker(num:int):
num_list = list(range(num))
# print('worker start')
with Pool() as p:
p.map(printer, num_list)

def printer(num:int):
# print('printer')
print(f"Printing num {num} - child: {os.getpid()} - parent: {os.getppid()}")

if __name__ == '__main__':
with ProcessPoolExecutor(4) as controller_pool:
controller_pool.map(worker, [1,2,3])
print('here')

相关内容

  • 没有找到相关文章

最新更新