我在多处理环境中使用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 :(得分:0)
好的...问题实际上不是很聪明;因为我总是以0进行播种,所以结果总是相同的。我不了解那里的文档。
Faker.seed()解决了这个问题