2016-01-09 1 views
9

Est-ce que asyncio prend en charge les E/S asynchrones pour les opérations sur les fichiers? Si oui, comment puis-je l'utiliser dans Python 3.5 avec le code de syntaxe async/await?Est-ce que asyncio prend en charge les E/S asynchrones pour les opérations de fichiers?

+1

Vous voulez dire comme dans les docs et les exemples? https://docs.python.org/3/library/asyncio-eventloop.html#watch-file-descriptors https://docs.python.org/3/library/asyncio-eventloop.html#watch-a-file -descriptor-for-read-events –

+0

Je veux dire, j'ai besoin d'une fonctionnalité d'E/S de fichier non bloquante. Mais dans docs j'ai trouvé seulement des descripteurs des fonctions de surveillance. – CthUlhUzzz

+0

Si vous voulez simplement des E/S non bloquantes, vous devriez simplement pouvoir utiliser les threads de python. Voulez-vous des E/S asynchrones ou des E/S non bloquantes? http://stackoverflow.com/questions/319132/asynchronous-filewriting-possible-in-python pourrait avoir quelques informations utiles. –

Répondre

8

La plupart des systèmes d'exploitation ne prennent pas en charge les opérations de fichiers asynchrones. C'est pourquoi asyncio ne les supporte pas non plus. Pour plus d'informations, voir the asyncio wiki pour plus d'informations.

+0

C'est. Même 'node.js' utilise le pool de threads en interne pour fournir le fichier async API –

4

Cela dépend de la bibliothèque que vous utilisez.

curio offre cette fonctionnalité, https://curio.readthedocs.io/en/latest/reference.html#module-curio.file

asyncio plaine n'a pas, mais il y a des bibliothèques 3ème partie, par exemple https://github.com/Tinche/aiofiles (qui est vraiment l'accès aux fichiers synchrone isolé dans les threads)

Les systèmes d'exploitation modernes fournissent des primitives de fichiers asynchrones, mais ceux-ci sont variés, donc chacun aurait besoin de sa propre implémentation. S'il vous plaît comparer:

Je soupçonne que quelqu'un va bientôt déchirer sous-tendant async io de node.js et de faire une bibliothèque Python décent, ou peut-être quelqu'un a déjà.

+0

Autant que je sache, toutes les options que vous avez mentionnées utilisent des threads (curio, aiofiles, l'implémentation aio de glib et même les E/S superposées de Windows utilise un thread piscine sous le capot). – jfs

2

asyncio n'a pas de support pour cela. Cependant, aiofiles ne supporte que cela. Jetez un coup d'oeil s'il vous plait.