многопроцессорный имитатор python — заполнение не работает

#python #seed #faker

#python #seed #имитатор

Вопрос:

Я использую faker в многопроцессорной среде. Я вставляю тестовые данные в mongo db, используя массовый метод pymongo. Для каждого пакета я создаю поддельные данные. Это работает в среде одного процесса, но не для многопроцессорной обработки.

Логика кода выглядит следующим образом.

 from faker import Faker
import multiprocessing
from bson import Decimal128

def insert_bulk(bulk_size):
    fake = Faker()

    fake_data = [get_fake_dataset(fake) for i in range(bulk_size)]

    #write to db

def get_fake_dataset(fake):
    Faker.seed(0)
    return {
        "lat": Decimal128(fake.latitude()),
        "lon": Decimal128(fake.longitude()),
    }


pool = multiprocessing.Pool(processes=multiprocessing.cpu_count() - 1)

pool.map(insert_bulk, [1000])

    
  

Я поиграл с этим, но не получил результата. Все элементы в элементе списка одинаковы.

Я знаю, что процессы не используют общую память, и я предполагаю, что при создании экземпляра в другой памяти класс-имитатор, в котором используется метод seed(), больше не может ссылаться на новый экземпляр, только что созданный в процессе. Пока мое, возможно, правильное предположение.

Может кто-нибудь сказать, что я делаю не так? 🙂 И как будет выглядеть правильное решение.

Я также следовал этому подходу:

 Faker = Factory.create
fake = Faker()
fake.seed(0)
  

Создание фабрики в методе insert_bulk, но это также не помогло.

Спасибо.

Ответ №1:

хорошо … вопрос на самом деле не очень умный; поскольку я всегда заполняю 0, результат всегда один и тот же. Я не понял там документацию.

Faker.seed() решает проблему