Как создать модуль Python в C ++, что многопроцессорная передача не поддерживаетC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как создать модуль Python в C ++, что многопроцессорная передача не поддерживает

Сообщение Anonymous »

Я пытаюсь, но не могу воспроизвести и понять проблему, с которой столкнулся при сбое многопроцессорной обработки при использовании модуля Python, написанного на C++. Насколько я понимаю, проблема в том, что многопроцессорной обработке необходимо выбрать функцию, которую она использует. Поэтому я сделал my_module.cpp следующим образом:

Код: Выделить всё

#include

int add(int input_number) {
return input_number + 10;
}

PYBIND11_MODULE(my_module, m) {
m.doc() = "A simple module implemented in C++ to add 10 to a number.";
m.def("add", &add, "Add 10 to a number");
}
< /code>
после < /p>
pip install pybind11
< /code>
Я скомпилирован с: < /p>
c++ -O3 -Wall -shared -std=c++11 -fPIC $(python3 -m pybind11 --includes) my_module.cpp -o my_module$(python3-config --extension-suffix)
Я могу импортировать my_module , и он работает, как и ожидалось.

Код: Выделить всё

import my_module
import pickle

# Use the add function
print(my_module.add(5))  # Outputs: 15

# Attempt to pickle the module
try:
pickle.dumps(my_module)
except TypeError as e:
print(f"Pickling error: {e}")  # Expected error
, которая выводит ошибку маринования: невозможно Pickle 'Module' Object , как и ожидалось. Полем Я ожидал, что это даст ошибку марина. < /P>

Код: Выделить всё

import my_module
from multiprocessing import Pool

# A wrapper function to call the C++ add function
def parallel_add(number):
return my_module.add(number)

if __name__ == "__main__":
numbers = [1, 2, 3, 4, 5]

try:
# Create a pool of worker processes
with Pool(processes=2) as pool:
results = pool.map(parallel_add, numbers)
print(results)  # If successful, prints the results
except Exception as e:
print(f"Multiprocessing error: {e}")
Как создать модуль Python на C++ с помощью pybind11, который не работает при многопроцессорной обработке из-за ошибки травления?


Подробнее здесь: https://stackoverflow.com/questions/793 ... ot-support
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»