Comments (4)
@h4l I think should trying to add asyncio.Lock
. Of course create a PR, I will assist to fix it.
from aiofile.
I intentionally didn't put any locks on it. Here the behavior completely repeats the behavior of the operating system. Usually the user has to take care of opening and closing the file correctly, tell us why you want to open the same instance in different coroutines?
from aiofile.
I use the AIOFile in a class. Its methods which operate on the file assume it may not have been opened, so they await the AIOFile object before using it to ensure it's open. I don't think there's a way to check if an AIOFile
was already opened (without poking at the private _file_obj
) so my __init__()
can't enforce that the file is open when instances are created. And if I opened it in init myself, I'd have to create an asyncio.Task
for the async open to handle failures.
I will probably refactor to do the open once in my __aenter__()
. I guess I don't really want to open it multiple times, but doing so was the simplest way to ensure it was open, and I didn't expect that doing that would cause this kind of bug.
from aiofile.
Are you happy with the current behaviour, or would you be open to a PR to change it? A few options come to mind:
- Use a lock so that concurrent
open()
calls can't result in the actual file being opened more than once - Don't lock, but take an optimistic concurrency control approach — after getting a file handle, check again if one was opened while waiting, and don't overwrite the existing FD if so
- As 2. but raise an error if the file was concurrently opened more than once (assuming you feel it's not a valid use of the API to call
open()
concurrently) - Something else?
I'd be happy to contribute a PR.
from aiofile.
Related Issues (20)
- how to create dir and file usign async api? HOT 2
- Can't install on Amazon Linux HOT 2
- Function not implemented HOT 1
- async_open does not create file if file does not exist in mode 'a+' HOT 1
- Add support for StringIO and BytesIO HOT 1
- Can I use aiofile.async_open without a with statement? HOT 4
- Some sort of changelog / release notes?
- async_open doesn't fully mimic the behavior of Python file objects HOT 5
- Manual context management example on readme has a bug HOT 1
- How to work with NFS? HOT 1
- Tag the source HOT 1
- AIOFile context manager looses data HOT 3
- aiofile LineReader does a read for every line in spite of having multiple lines in CHUNK_SIZE HOT 2
- Which of the methods are coroutine-safe? HOT 2
- Why is fsync calling fdsync HOT 2
- No flush API and no way to set unbuffered writes in binary mode HOT 3
- Add performance benchmarks to the readme HOT 3
- Unable to call close() twice
- Memory leak during import
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 aiofile.