Comments (9)
no, it's not thread safe
however in datafaker initialization of Faker
is very cheap in compare with javafaker it is about 100 times faster (we made some measurements for previous versions https://www.datafaker.net/documentation/performance170/#initialization)
so it's possible to create a faker per thread or even per task and it will be cheap (based on same measurements) performance of creation a new instance of faker is comparable with performance of simple expression evaluation. In case of complex expression initialization will be faster
from datafaker.
Do I need to construct a new Faker instance per call with the defined locale?
no, you can do it like that
Faker faker = new Faker();
faker.doWith(() -> faker.expression("#{Name.firstName}"), Locale.GERMAN);
from datafaker.
Please be more specific.
Each doWith
call seems to mutate the current context, so it is not safe to use with multiple threads. I made this example:
fun main() {
val faker = Faker()
val threads = mutableListOf<Thread>()
repeat(1000) {
val locale = if (faker.bool().bool()) Locale.ENGLISH else Locale.JAPAN
threads.add(Thread {
val result = faker.doWith({faker.expression("#{Name.firstName}")}, locale)
println("[$locale] $result")
})
}
threads.forEach { it.start() }
}
There are many entries for Japanese locale containing english names and vice-versa.
no, it's not thread safe however in datafaker initialization of
Faker
is very cheap in compare with javafaker it is about 100 times faster (we made some measurements for previous versions https://www.datafaker.net/documentation/performance170/#initialization)so it's possible to create a faker per thread or even per task and it will be cheap (based on same measurements) performance of creation a new instance of faker is comparable with performance of simple expression evaluation. In case of complex expression initialization will be faster
Will each Faker lookup using the resolver load the values from files into memory? In other words, should I be worried about memory consumption with instancing a new Faker per call?
from datafaker.
Will each Faker lookup using the resolver load the values from files into memory?
only if you request it.
It is lazy(after #33 and some other improvements), meaning that it loads files only for the provider which was invoked. If some providers are not invoked, then files for them will not be loaded. This one of the diff between datafaker and javafaker
from datafaker.
depending on your customer you might be interested in datafaker-gen(datafaker based configurable generator ) https://github.com/datafaker-net/datafaker-gen where it's possible to specify locale
from datafaker.
Amazing work with this library! Thank you for the doWith
tip and the link, I'll check it out
from datafaker.
@snuyanzin the only thing I noticed is that this operation is not thread-safe. Is there a multi-threaded environment alternative?
from datafaker.
Please be more specific.
from datafaker.
Awesome, thanks for all the help!
from datafaker.
Related Issues (20)
- birthday throwing exception if run at 2/29/2024 HOT 7
- Faker.date().birthday() returns in invalid Date on Leap Day HOT 2
- Possible JSON generation error HOT 15
- Duplicate faker groups (Money and Currency) HOT 9
- Release 2.2.0 HOT 10
- Add Java 22 to the build matrix. HOT 6
- Adding a Sensor data provider for testing IoT applications HOT 5
- Support JPMS HOT 7
- Extend medical providers to include more medicine-related values HOT 11
- We should support Ollama HOT 2
- Fix address for 'en-NZ' locale
- Using metacharacters on a character set with regexify does not produce the expected text
- v2.2.0: Exceptions when calling certain Faker methods HOT 8
- NullPointerException when using Faker#locality HOT 3
- Unit test failed
- Provide Stream output for transformers HOT 4
- java.lang.RuntimeException: Unable to resolve #{male_first_name} directive for FakerContext HOT 14
- Allow an easy way to create random PII/PHI data HOT 3
- Breaking DateAndTime HOT 4
- Intermitted expressions failures during testing HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from datafaker.