#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() решает проблему