Skip to main content

Windows version of uvloop

Project description

Code style: black

IDIM

Winloop

PyPI version PyPI - Downloads License: MIT License: Apache-2.0

An alternative library for uvloop compatibility with Windows because let's face it. Windows' Python asyncio standard library is garbage, especially when Windows Defender decides to eat half of your RAM. I never really liked the fact that I couldn't make anything run faster especially when you have fiber internet connections in place and you've done all the optimizations you could possibly think of. It always felt disappointing when libuv is available for Windows but Windows was never compatible with uvloop.

Since nobody was willing to step in after so many years of waiting, I went ahead and downloaded the source code for uvloop and started modifying the source code to be Windows compatible by carefully removing and changing parts that were not made for Windows. Many hours of research went into making this library.

The differences with uvloop is that forking has been fully disabled and some smaller API calls had to be changed, error handling has been carefully modified and subprocesses release the GIL instead of forking out...

There is a performance increase of about 5 times with Winloop compared to using the WindowsSelectorEventLoopPolicy and WindowsProactorEventLoopPolicy which have been known to trigger SSL problems in Python 3.9. Winloop is a very good replacement for solving those SSL problems as well. This library also has comparable performance to its brother uvloop.

How to install Winloop on your Windows Operating System

pip install winloop

You can also clone the repository and build the extension yourself by running the command below if you wish to use or build this library locally. Note that you will need Cython and The Visual C++ extensions to compile this library on your own.

python setup.py build_ext --inplace

Reporting issues

If you find any bugs with this library be sure to open up an issue in the issuetracker. Me and other contributors will be happy try to help you figure out and diagnose your problems.

Making pull requests

We encourage anyone to make pull-requests to Winloop, containing anything from spelling mistakes to vulnerability patches. Every little bit helps keep this library maintained and alive. Make sure that you are able to compile the library with the steps shown above. We plan to implement a nightly workflow to verify one's pull-request in the future.

try:
    import aiohttp
    import aiohttp.web
except ImportError:
    skip_tests = True
else:
    skip_tests = False

import asyncio
import unittest
import weakref
import winloop
import sys

class TestAioHTTP(unittest.TestCase):
    def __init__(self, methodName: str = "test_aiohttp_basic_1") -> None:
        super().__init__(methodName)


    def setUp(self):
        self.loop = asyncio.get_event_loop()

    def test_aiohttp_basic_1(self):
        PAYLOAD = '<h1>It Works!</h1>' * 10000

        async def on_request(request):
            return aiohttp.web.Response(text=PAYLOAD)

        asyncio.set_event_loop(self.loop)
        app = aiohttp.web.Application()
        app.router.add_get('/', on_request)

        runner = aiohttp.web.AppRunner(app)
        self.loop.run_until_complete(runner.setup())
        site = aiohttp.web.TCPSite(runner, '0.0.0.0', '10000')
        self.loop.run_until_complete(site.start())
        port = site._server.sockets[0].getsockname()[1]

        async def test():
            # Make sure we're using the correct event loop.
            self.assertIs(asyncio.get_event_loop(), self.loop)

            for addr in (('localhost', port),
                         ('127.0.0.1', port)):
                async with aiohttp.ClientSession() as client:
                    async with client.get('http://{}:{}'.format(*addr)) as r:
                        self.assertEqual(r.status, 200)
                        result = await r.text()
                        self.assertEqual(result, PAYLOAD)

        self.loop.run_until_complete(test())
        self.loop.run_until_complete(runner.cleanup())

    def test_aiohttp_graceful_shutdown(self):
        async def websocket_handler(request):
            ws = aiohttp.web.WebSocketResponse()
            await ws.prepare(request)
            request.app['websockets'].add(ws)
            try:
                async for msg in ws:
                    await ws.send_str(msg.data)
            finally:
                request.app['websockets'].discard(ws)
            return ws

        async def on_shutdown(app):
            for ws in set(app['websockets']):
                await ws.close(
                    code=aiohttp.WSCloseCode.GOING_AWAY,
                    message='Server shutdown')

        asyncio.set_event_loop(self.loop)
        app = aiohttp.web.Application()
        app.router.add_get('/', websocket_handler)
        app.on_shutdown.append(on_shutdown)
        app['websockets'] = weakref.WeakSet()

        runner = aiohttp.web.AppRunner(app)
        self.loop.run_until_complete(runner.setup())
        site = aiohttp.web.TCPSite(runner, '0.0.0.0', '10000')
        self.loop.run_until_complete(site.start())
        port = site._server.sockets[0].getsockname()[1]

        async def client():
            async with aiohttp.ClientSession() as client:
                async with client.ws_connect(
                        'http://127.0.0.1:{}'.format(port)) as ws:
                    await ws.send_str("hello")
                    async for msg in ws:
                        assert msg.data == "hello"

        client_task = asyncio.ensure_future(client())

        async def stop():
            await asyncio.sleep(0.1)
            try:
                await asyncio.wait_for(runner.cleanup(), timeout=0.1)
            except Exception as e:
                print(e)
            finally:
                try:
                    client_task.cancel()
                    await client_task
                except asyncio.CancelledError:
                    pass

        self.loop.run_until_complete(stop())



if __name__ == "__main__":
    # print("tesing without winloop")
    # asyncio.DefaultEventLoopPolicy = asyncio.WindowsSelectorEventLoopPolicy
    # asyncio.DefaultEventLoopPolicy = asyncio.WindowsProactorEventLoopPolicy
    unittest.main()
    # Looks like winloop might be 3x faster than the Proctor Event Loop , THAT's A HUGE IMPROVEMENT!
    print("testing again but with winloop enabled")
    winloop.install()
    unittest.main()

The benchmarks for the code above are as follows

Benchmarks

TCP Connections


Asyncio Event Loop Policy Time (in Seconds)
WinLoopPolicy 0.493s
WindowsProactorEventLoopPolicy 2.510s
WindowsSelectorEventLoopPolicy 2.723s

That's a massive increase and jump from just TCP alone! I'll be posting more benchmarks soon, as I modify more of the current test suites made by uvloop...

How to Use Winloop with Fastapi

This was a cool little script I put together just to make Fastapi that much faster to handle:

# TODO this code example is deprecated
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
import winloop
import uvicorn
import asyncio
import datetime

app = FastAPI()

@app.on_event("startup")
def make_assertion():
    # Check to make sure that we bypassed the original eventloop Policy....
    assert isinstance(asyncio.get_event_loop_policy(), winloop.WinLoopPolicy)


@app.get("/test")
async def test_get_request():
    return HTMLResponse("<html><body><h1>FAST API WORKS WITH WINLOOP!</h1></body></html>")


# starllete will use asyncio.to_thread() so that this can remain asynchronous
@app.get("/date")
def test_dynamic_response():
    return str(datetime.datetime.now())


# Although tricky to pass and is not normal, it does in fact work...
if __name__ == "__main__":
    winloop.install()
    # Winloop's eventlooppolicy will be passed to uvicorn after this point...
    loop = asyncio.get_event_loop()
    config = uvicorn.Config(app=app,port=10000,loop=loop)
    server = uvicorn.Server(config)
    asyncio.run(server.serve())

How To Use Winloop When Uvloop is not available

# Here's A small Example of using winloop when uvloop is not available to us
import sys
import aiohttp
import asyncio

async def main():
    async with aiohttp.ClientSession("https://httpbin.org") as client:
        async with client.get("/ip") as resp:
            print(await resp.json())

if __name__ == "__main__":
    if sys.platform in ('win32', 'cygwin', 'cli'):
        from winloop import run
    else:
        # if we're on apple or linux do this instead
        from uvloop import run
    run(main())

TODO-List

  • In Winloop 0.2.0 or before 2026 I would like to start planning to migrate to pytest so that things could be formatted a little better. A Migration Python script might be needed or looked into.

  • Update Fastapi Example to a more recent version of fastapi

  • Help Wanted. We're looking for other maintainers to help us.

  • Nightly Builds And Test Suite Workflows for anyone wanting to use newer unreleased versions. (Done, it runs now)

  • Adding in the necessary hooks for pyinstaller to compile this fast library to executable code even though hooks have been known to inflate the size of the .exe files. This is because calling hidden-imports for all the __init__.py modules might annoy some developers. (Luckily I'm aware of this issue because I've been doing this myself...) Update, This is now pending and I hope that it passes

  • write a workflow for nightly builds if necessary for verification of pull requests.

  • Update benchmarks (They are old) can't believe I maintained this project for over a year now...

Videos

Contributing

I put my heart and soul into this library ever since it began and any help is apperciated and means a lot to me, I have other things I wish to explore so every little bit helps

How Can I contribute?

  • I make and branch and make edits and then I do a pull requests before I just step in and add something new. This way you have time to review my additions, changes or feature beforehand.
  • Forking The library.
  • Fixing or editing workflows.
  • Finding and editing spelling mistakes.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

winloop-0.6.1.tar.gz (2.6 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

winloop-0.6.1-cp314-cp314t-win_arm64.whl (575.9 kB view details)

Uploaded CPython 3.14tWindows ARM64

winloop-0.6.1-cp314-cp314t-win_amd64.whl (804.5 kB view details)

Uploaded CPython 3.14tWindows x86-64

winloop-0.6.1-cp314-cp314t-win32.whl (645.6 kB view details)

Uploaded CPython 3.14tWindows x86

winloop-0.6.1-cp314-cp314-win_arm64.whl (546.9 kB view details)

Uploaded CPython 3.14Windows ARM64

winloop-0.6.1-cp314-cp314-win_amd64.whl (655.2 kB view details)

Uploaded CPython 3.14Windows x86-64

winloop-0.6.1-cp314-cp314-win32.whl (538.8 kB view details)

Uploaded CPython 3.14Windows x86

winloop-0.6.1-cp313-cp313-win_arm64.whl (528.2 kB view details)

Uploaded CPython 3.13Windows ARM64

winloop-0.6.1-cp313-cp313-win_amd64.whl (644.2 kB view details)

Uploaded CPython 3.13Windows x86-64

winloop-0.6.1-cp313-cp313-win32.whl (531.9 kB view details)

Uploaded CPython 3.13Windows x86

winloop-0.6.1-cp312-cp312-win_arm64.whl (528.9 kB view details)

Uploaded CPython 3.12Windows ARM64

winloop-0.6.1-cp312-cp312-win_amd64.whl (644.7 kB view details)

Uploaded CPython 3.12Windows x86-64

winloop-0.6.1-cp312-cp312-win32.whl (532.0 kB view details)

Uploaded CPython 3.12Windows x86

winloop-0.6.1-cp311-cp311-win_arm64.whl (530.1 kB view details)

Uploaded CPython 3.11Windows ARM64

winloop-0.6.1-cp311-cp311-win_amd64.whl (647.1 kB view details)

Uploaded CPython 3.11Windows x86-64

winloop-0.6.1-cp311-cp311-win32.whl (525.2 kB view details)

Uploaded CPython 3.11Windows x86

winloop-0.6.1-cp310-cp310-win_arm64.whl (528.3 kB view details)

Uploaded CPython 3.10Windows ARM64

winloop-0.6.1-cp310-cp310-win_amd64.whl (640.0 kB view details)

Uploaded CPython 3.10Windows x86-64

winloop-0.6.1-cp310-cp310-win32.whl (526.9 kB view details)

Uploaded CPython 3.10Windows x86

winloop-0.6.1-cp39-cp39-win_arm64.whl (529.6 kB view details)

Uploaded CPython 3.9Windows ARM64

winloop-0.6.1-cp39-cp39-win_amd64.whl (641.1 kB view details)

Uploaded CPython 3.9Windows x86-64

winloop-0.6.1-cp39-cp39-win32.whl (527.7 kB view details)

Uploaded CPython 3.9Windows x86

winloop-0.6.1-cp38-cp38-win_amd64.whl (645.6 kB view details)

Uploaded CPython 3.8Windows x86-64

winloop-0.6.1-cp38-cp38-win32.whl (534.0 kB view details)

Uploaded CPython 3.8Windows x86

File details

Details for the file winloop-0.6.1.tar.gz.

File metadata

  • Download URL: winloop-0.6.1.tar.gz
  • Upload date:
  • Size: 2.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1.tar.gz
Algorithm Hash digest
SHA256 e08866a1e36a536b61d5e796dd40af7ac2f8a4878b0fe51fb0fd14178fe3b25b
MD5 5724a9fa18e8b585906bf66c4fb5d6a8
BLAKE2b-256 8102bd77d70d61fe1a5273f29b48b4533c2b79df2c7c865a5da15edd2f3734c8

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp314-cp314t-win_arm64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp314-cp314t-win_arm64.whl
  • Upload date:
  • Size: 575.9 kB
  • Tags: CPython 3.14t, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 cc69611cf4e6d58ac2437d88fa27264bd0d7f64dadeef63a5612288755b9763a
MD5 c7e50d7f5f02acecc2b11eec039a31d4
BLAKE2b-256 fe5a4cd0c1c5eea5c67e2f109239b14acf1bff9ef39aa98d580cb4f14397f1b4

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 804.5 kB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 4f44c9ad0477bf041214391c4ea7866065c3ec585d7301585a2c4347b377f628
MD5 eeba36a12183b9cff7c94342fe824b2f
BLAKE2b-256 4f1ce6106b3e43143e71b57ad72b8868ea1d91081c2d6c41765fe0627eb205a8

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp314-cp314t-win32.whl.

File metadata

  • Download URL: winloop-0.6.1-cp314-cp314t-win32.whl
  • Upload date:
  • Size: 645.6 kB
  • Tags: CPython 3.14t, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 617b469ee2f6715c4c4b0d230658e9c16d76040852b6731aa06bc9e7428df29f
MD5 700095385fbb26e344cd8b396e778de2
BLAKE2b-256 a8a8d76136acde880a9cf567246fd9a4435a259cb636c05424779ff227f50877

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp314-cp314-win_arm64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp314-cp314-win_arm64.whl
  • Upload date:
  • Size: 546.9 kB
  • Tags: CPython 3.14, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 94acd7fda03bbe82274bb4a0f8306f7c78bf342f38b3a864ad04f755a100220b
MD5 5dc4fd52991ca158586e7a0cfcb8bff2
BLAKE2b-256 172fa3b8ed3de8eaeec771723e4d0529b484579baf0f6363e4ccac675e1215a2

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 655.2 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 02f744bd7f2cb9a6c11edb78ddaf393df3e431aa0a9e44a8f02cadbee0fe3143
MD5 0240b18abb80d622fa2871128d83a1ff
BLAKE2b-256 a6f01c7c963309f80f80c5ca583dba641d35b0156bb869d280912f7e26a40bb1

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp314-cp314-win32.whl.

File metadata

  • Download URL: winloop-0.6.1-cp314-cp314-win32.whl
  • Upload date:
  • Size: 538.8 kB
  • Tags: CPython 3.14, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 537554a62514f2b26f3604a2e937e6e85dc033506a26fabb7799b22dd54f7448
MD5 008a36a06fd5837b8229ed419a9f0963
BLAKE2b-256 6163ee88fc19cebf4db513ce70912fbd8f56865d0410714d089b5c98fabba871

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp313-cp313-win_arm64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp313-cp313-win_arm64.whl
  • Upload date:
  • Size: 528.2 kB
  • Tags: CPython 3.13, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 fb99dac71a20479a21263d38763562d32e1d04867dc517d1ce78af482c7d02c3
MD5 920c493fd961a0649cb3bbcb58bc61e6
BLAKE2b-256 0afc700acc73d6d5dd4a06e22958767b5613cc576fcf281c283367dda1354460

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 644.2 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1d2b3bb4e0bd0a5b2a11c80c8df7ec7fa1da48747d3fbb2d843ef8af73507c29
MD5 ac1f7f70481259f591aa01e8416ce7f9
BLAKE2b-256 0c398aa12735de7b385cf67c39dee5e2d1ae38c78e7fc8c53e0c932a163ba753

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp313-cp313-win32.whl.

File metadata

  • Download URL: winloop-0.6.1-cp313-cp313-win32.whl
  • Upload date:
  • Size: 531.9 kB
  • Tags: CPython 3.13, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 cd12d3153e01a54ab96420bd4198e00ec55b9f14366a2545ac3af0218d10ec5e
MD5 6dd883c2bf07eeb0d11856da5faabc57
BLAKE2b-256 624fde44f12f45511696360df64c68287856fdccacdaf08f4cddd1a1dad5bf0c

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 528.9 kB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 1e4f5e23f80e10b12a52fadeb0bbe6e7f00686ee1f0cb6eb72408c83de6359ae
MD5 4bce5d9c2afba9986226a79f555e8199
BLAKE2b-256 f9dcf3594303cc5b44722284dcdff379fde94f0994a0b946716b85383d5614ee

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 644.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b2c2a4b539a43d58c3b1a589214217c8cc937c5d3421c2de6cdc8920f2da41ea
MD5 d334d31119f931baa3aa52d256fbb527
BLAKE2b-256 8539e33a10990da29cdddf26eabbbdeae07f1a67e1b1dfe8aa614ea5a4d9d757

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp312-cp312-win32.whl.

File metadata

  • Download URL: winloop-0.6.1-cp312-cp312-win32.whl
  • Upload date:
  • Size: 532.0 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 dab52e1ab836579f8651e892f8c5f6be7ae75423e8e0b61a87c04bde4cd2a29d
MD5 2dfe969dcf8220facda00f15ffdafe0a
BLAKE2b-256 89209abe90ad849488055e90383482c39218b47e1b44f5cb49bdf5d6b3779463

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 530.1 kB
  • Tags: CPython 3.11, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 3be950a0674efdfed6f35c0b8f34899c1a000e5b3d314c4e906ec5056582ace5
MD5 651aea16b6fddcd32ef3a0f3565a2029
BLAKE2b-256 7b70ab505e83ee459a0599dbd0080f6080bf88fe66910ff240fd72f2c0ded6bf

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 647.1 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 12f79dfed9f0b097b331447057be2265355e9d8b7b3781c5c91e65ca976dbf37
MD5 3ea65a69d5978c9a1238434c04c94878
BLAKE2b-256 a1b714fe51db7d89e1b0735b4a43078cf82333033f5d016bd3440a4c46ceafa0

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp311-cp311-win32.whl.

File metadata

  • Download URL: winloop-0.6.1-cp311-cp311-win32.whl
  • Upload date:
  • Size: 525.2 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 db00e1b6e654f7cdc3be3b839445fa7a9582f529b72ce2f5f2ee301b8895bc4e
MD5 b7212d19250ea11a742930cb13a31935
BLAKE2b-256 a5eeed4f7344e26949d6a2dd6de59066171cc442ee55ce8d38e558d5e8a48e72

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp310-cp310-win_arm64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 528.3 kB
  • Tags: CPython 3.10, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 0d211db58e1e183a4bf8035b79c2c4e17d8311b6be85ca72e848b927132f4885
MD5 afd113cd922f71577633c04cd5a8dfee
BLAKE2b-256 da5c483cbe1b38c3f72da633e08268f139b07c08841874fa72d14a6f2ffb3376

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 640.0 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 781c8e55a77df815cc7bbdaf74e2c8cd21fe61360091f5a660844ec3a63d206f
MD5 8b1e3c906fd76ce51f532e2ae9bcf31c
BLAKE2b-256 78458f372c3579d5f10d6b914b58fb716b3193351716decf570276855bf5d23b

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp310-cp310-win32.whl.

File metadata

  • Download URL: winloop-0.6.1-cp310-cp310-win32.whl
  • Upload date:
  • Size: 526.9 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 d58ec755ce714468577fa9894701987877ad474e546a45d4b40fdd440e90778b
MD5 403511dc7241799ded825389df466d86
BLAKE2b-256 42ad17e96ee41bac43f63bcde0fc9c16f60c526b9e623dbb5c6239e6c3459005

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp39-cp39-win_arm64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp39-cp39-win_arm64.whl
  • Upload date:
  • Size: 529.6 kB
  • Tags: CPython 3.9, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 1c2837fb73af1dce8a1d7a39bd25314115bebffa8b0c0eaad72f7e4ca411357a
MD5 e09a905e73f50797a0992797d771fd28
BLAKE2b-256 6339f7de41a1310ae3d570ac5776ff23f5d37b9ab7b2c3f247e74482626e5b37

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 641.1 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 9c738d13f2207fa5c13bae97025dfb20a8872dbcf09e2b5bd06fd393d760ed1d
MD5 65095be4650db2ec8717ad8fd9a43c45
BLAKE2b-256 0b36f67310af8808712cced6e482a3cafbbab1670b5da9d11b67b6d6a1cf2c50

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp39-cp39-win32.whl.

File metadata

  • Download URL: winloop-0.6.1-cp39-cp39-win32.whl
  • Upload date:
  • Size: 527.7 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 be0ba5fde436cd45bca800f59eb805b59d41e4dd1d8fd02890dd07ec5c88ecc5
MD5 a7ac93292dccf36095cccce94280ce96
BLAKE2b-256 210070568215182feaa305ec65f221b6591b29e78ee37f2010985af2ec629ae0

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: winloop-0.6.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 645.6 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 2a36a52b114621aa6b3bcdd6cb71cdaf40432942444ae2d9028272a835984186
MD5 6c39e8f580a933978176ffaa837aaf02
BLAKE2b-256 3ab7484f8df9b767122d6f2daa41cd8bcf5ec983f7ee60c40e7d9080535b6a55

See more details on using hashes here.

File details

Details for the file winloop-0.6.1-cp38-cp38-win32.whl.

File metadata

  • Download URL: winloop-0.6.1-cp38-cp38-win32.whl
  • Upload date:
  • Size: 534.0 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for winloop-0.6.1-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 c4ffc2d8c62688f97d32f540b0377e48ca7017af5551eded879dd7f548f294b0
MD5 9202d1e2595f6a7bf4ffdaf21570de2d
BLAKE2b-256 484d97697a812c3c9ad85a9609db9341a9e6b9dd69c123d63350345cc66ae4ef

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page