python多处理伪造者-无法播种

问题描述

我在多处理环境中使用faker。我使用pymongo的bulk方法将测试数据插入mongo db。对于每个批量,我都会创建假数据。确实可以在单个进程环境中工作,但不适用于多重处理。

代码逻辑如下所示。

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类无法再引用刚在内存中创建的新实例。处理。到目前为止,我可能是正确的猜测。

有人可以告诉我我做错了什么吗? :)正确的解决方案将是什么样子。

我也遵循这种方法

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

使用insert_bulk方法创建工厂,但这也无济于事。

谢谢。

解决方法

好的...问题实际上不是很聪明;因为我总是以0进行播种,所以结果总是相同的。我不了解那里的文档。

Faker.seed()解决了这个问题

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...