python - "The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec()."错误是什么意思?

标签 python macos process multiprocessing

这个错误是什么意思?当我在进程中使用一些 C++ 包装的代码时,似乎会发生这种情况(当我在普通的 for 循环中使用它时没有错误)。

The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.

示例代码:

def split_to_chunks(items, k):
    n = len(items) // k
    chunks = []
    for i in range(0, len(items), n):
        chunks.append(items[i:i + n])
    return chunks

def process_chunk(process_id, img_filepaths, output_dir):
    print('Enter process_id:', process_id)
    for img_filepath in img_filepaths:
        try:
           //Code section
        except Exception as e:
            print(f'Error: process_id: {process_id} : {img_filepath}', e)
    print('End process_id:', process_id)

img_filepaths = get_img_filepaths(images_dir)

#n_processes = multiprocessing.cpu_count() // 2
n_processes = 1
img_filepaths_chunks = split_to_chunks(img_filepaths, n_processes)

processes = []
for i in range(n_processes):
    process = multiprocessing.Process(
        target=process_chunk,
        args=(i, img_filepaths_chunks[i], output_dir)
    )
    processes.append(process)
for process in processes:
    process.start()
for i, process in enumerate(processes):
    process.join()
    if process.exitcode != 0:
        print(f'Error: process_id: {i} failed.')
        #sys.exit(1)

最佳答案

似乎像这里建议的那样使用“spawn”https://turtlemonvh.github.io/python-multiprocessing-and-corefoundation-libraries.html正在解决问题。

import multiprocessing as mp
mp.set_start_method('spawn')

关于python - "The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec()."错误是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64174552/

相关文章:

python - 如何与 Telegram bot python同时工作

python - 如何在每个子列表的索引[0]处拆分字符串,并使每个拆分索引位于其自己的原始列表中?

iphone - 拍摄当前 Photoshop 文件的快照

java - Scala 检查外部进程 ID (pid) 当前是否正在运行?

python - Python 3.6.4中使用Urllib下载图像

python - 加入文件名时出现 UnicodeEncodeError

macos - 如何向 NSMatrix 内的 NSButtonCell 添加工具提示

c++ - std::string 构造函数损坏指针

c - 为什么我的信号处理程序不处理 SIGKILL,有时会导致帐户注销

javascript - 如何将输出 fork /集群进程通过管道传输到主 stdout/stderr