Skip to main content

Windows version of uvloop

Project description

Code style: black

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.5.0.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.5.0-cp314-cp314t-win_arm64.whl (601.5 kB view details)

Uploaded CPython 3.14tWindows ARM64

winloop-0.5.0-cp314-cp314t-win_amd64.whl (837.1 kB view details)

Uploaded CPython 3.14tWindows x86-64

winloop-0.5.0-cp314-cp314t-win32.whl (673.1 kB view details)

Uploaded CPython 3.14tWindows x86

winloop-0.5.0-cp314-cp314-win_arm64.whl (571.0 kB view details)

Uploaded CPython 3.14Windows ARM64

winloop-0.5.0-cp314-cp314-win_amd64.whl (684.0 kB view details)

Uploaded CPython 3.14Windows x86-64

winloop-0.5.0-cp314-cp314-win32.whl (564.0 kB view details)

Uploaded CPython 3.14Windows x86

winloop-0.5.0-cp313-cp313-win_arm64.whl (551.7 kB view details)

Uploaded CPython 3.13Windows ARM64

winloop-0.5.0-cp313-cp313-win_amd64.whl (671.0 kB view details)

Uploaded CPython 3.13Windows x86-64

winloop-0.5.0-cp313-cp313-win32.whl (556.4 kB view details)

Uploaded CPython 3.13Windows x86

winloop-0.5.0-cp312-cp312-win_arm64.whl (552.6 kB view details)

Uploaded CPython 3.12Windows ARM64

winloop-0.5.0-cp312-cp312-win_amd64.whl (671.5 kB view details)

Uploaded CPython 3.12Windows x86-64

winloop-0.5.0-cp312-cp312-win32.whl (556.4 kB view details)

Uploaded CPython 3.12Windows x86

winloop-0.5.0-cp311-cp311-win_arm64.whl (555.5 kB view details)

Uploaded CPython 3.11Windows ARM64

winloop-0.5.0-cp311-cp311-win_amd64.whl (678.1 kB view details)

Uploaded CPython 3.11Windows x86-64

winloop-0.5.0-cp311-cp311-win32.whl (552.2 kB view details)

Uploaded CPython 3.11Windows x86

winloop-0.5.0-cp310-cp310-win_arm64.whl (554.2 kB view details)

Uploaded CPython 3.10Windows ARM64

winloop-0.5.0-cp310-cp310-win_amd64.whl (670.1 kB view details)

Uploaded CPython 3.10Windows x86-64

winloop-0.5.0-cp310-cp310-win32.whl (553.6 kB view details)

Uploaded CPython 3.10Windows x86

winloop-0.5.0-cp39-cp39-win_arm64.whl (555.7 kB view details)

Uploaded CPython 3.9Windows ARM64

winloop-0.5.0-cp39-cp39-win_amd64.whl (671.5 kB view details)

Uploaded CPython 3.9Windows x86-64

winloop-0.5.0-cp39-cp39-win32.whl (554.6 kB view details)

Uploaded CPython 3.9Windows x86

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0.tar.gz
Algorithm Hash digest
SHA256 4b3b6737172e144e87ecbf123474e54ddf750084d42f04e476bcd746fd138ff5
MD5 d1fbd37df9a4926225c4b6383594d6e8
BLAKE2b-256 8debd6058bed9170c365f88a87aa433e6e08458a405a7b91f9c7e6dd6c10039e

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 1d0fc16799bb15d5648955bc6bb1fdd4d2e62b733e0821468789aabeead82db2
MD5 14a51b4284250b6ae4eb6a287db4ae36
BLAKE2b-256 ea2edfe68657a9638f87a4078f9b31c9ed50abb89b261a6accc03572570db2d7

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 49b079b4e510f666535f290b5f8a08db780f34c160589000a8feafd81bab1b88
MD5 a327ef43955786c6e64bd53d55a82b19
BLAKE2b-256 a31c4226c77f7ad39da224d09f5a11e8e1a2eb720c93ba908b41ce94f143dd20

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 b71b429b67133e7ff51590f48c107243537afe5243ca7a20ccd5165f41d40855
MD5 18b52379a6a94d9b136c2b4ad4059f86
BLAKE2b-256 d63e340cf1785a9dbe1c346c88f73bdbf358b2e85043501fd2bc2aa6c48c4ab7

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp314-cp314-win_arm64.whl
Algorithm Hash digest
SHA256 dce3ac6e4ac19c9709d4406042c5281d0ed92d3407633f4dabfbab58d97f8d61
MD5 b31c4e56a2f30165c62976e3a03956f8
BLAKE2b-256 f031aeafc86e668d778726f2bb81383d5560cc9eaf2e87dfa5b5a519294b34b4

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 46ff4d4e373e0b65e5356ebfdeb24d4b5389f6198cc54ad0b5173eaf9f417e3a
MD5 46ac759a9765f2d6e10692c53bdd83f2
BLAKE2b-256 a0344153b536ed867b37ac26cc1b9ab3c295ffa098983938369668a5929d815e

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp314-cp314-win32.whl
Algorithm Hash digest
SHA256 579a934d7dc5c96750863d7ed443b7ce9b2e52a56fba5a79c828116fe156a7a2
MD5 1531378c29f90b588f09a7bb76bb4e7d
BLAKE2b-256 4e7988b2c39ccbc24e27f9e94b17fc46fd088028a5a3b5547a1b64fc4e835fb9

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 db35ad28b74b96c9ec6c9a40cb1eac1e4525c4b6c671de624495ba734683a896
MD5 3d3082bdad87c3efc11bca9be8bbe8a4
BLAKE2b-256 38a7552f483a007d7404e484dd9cc52fe6d8c10d8b08bc4d2823348f44908153

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f5678af6b7613a786236280c1d82b05d7c1db959c005eb01b04810747635ac67
MD5 1974b48431847e8cce075cd21be8b714
BLAKE2b-256 431084e7858a715e16f5307962f0ad8dd39be4ddb8f328777c06d3f72377abe5

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp313-cp313-win32.whl
Algorithm Hash digest
SHA256 d2ffb21a272e0c10df9e9aa5be8ad65e6a974f6f00765ff25b181684258f7c87
MD5 7b7ade6f2bbb82fdb9d26fe3433b40f3
BLAKE2b-256 dc271235b7eb8cdacf01e1597cf40d0cbcdd0ce7f59222e620dd78f1685e90d8

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 1ee24df036f9eaaa1e7ea3354e462b544a2b432c2aa24d2d4b7bee34fde7e8de
MD5 9b98e2cc526bf81398e3457ffbc61e95
BLAKE2b-256 38a54d8ea6dc2236156d7cd21a21333019136dd6119623835a51c06d15786cd4

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b7c8f3c2d9f8c92ae436e097e6403559780b033ed2c242c0d7752b9ca61e55b6
MD5 67a7228b2d9b6a623e38849f1279238f
BLAKE2b-256 723e183a253d7a2b7c65f4dbdafb732942c6e2995da7fdc0d49648e6eb3ff2e4

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 d99e41dfbae72452ccb223985dc0bfaa47071b10916ec26dbf0c0fd726e5fb37
MD5 f68b8c85194111e7cddf7a3a85184f5f
BLAKE2b-256 fe9c6d4091f52c5b28e25b1c1b34192ecb67831bada55c432ba240f1eb12f227

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 859d2e62c7170539a094ebe69ecc210070ddd548e360970c3defcf0876a72624
MD5 3993853d093dcc999e0b4714310fa71d
BLAKE2b-256 85f21db45bdeec81f1254e00fc3ec2ca3132d55b74ac1d34283c94ac75af5be6

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1ea0aa74c5c67258d5c47e00a345e0789198265a0b2d254c54f8584be1b19db6
MD5 eb2fb5c9187419f338fc681fada2cf1c
BLAKE2b-256 5d3cfe55fff0a846922cd571566c6a0a8a1601a19ac85aee30cdd8823fad1e11

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 4c55f78bd54b1678c685b623487f6f5f70a5e544775488cfd31c7c3c3a6796f2
MD5 2c6745d55a02b7c39c87e76fdb3034c7
BLAKE2b-256 7daad2da3765be0565252e296540a20b892f2a26978f20a83a7a85c2ab575a09

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 bfcc45327a99f9a37b09bf2798d5d0f48eda5afc4174410a725b32574593fc60
MD5 ba45510497a26fafc239a8ecfe46634a
BLAKE2b-256 eda5c75220a6ce35225a2f6277813700ef85332759fcd104d4c78db367f79035

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 94f561d1efe38bccb077d9f693f8d399fac68a6fcc1554ebff8ef4051defa9c4
MD5 30e6ccbf5bae429d094a645e5c36cbfe
BLAKE2b-256 6aa543286d981ac98bf76f78128a69149b35e336d2b3a59b433fddc8d10ff601

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 f07e82f52771d00abe9193bf5ac54dd0108ba43d9fe89d6804be7da3e7e988ac
MD5 fd1a571dab18d092c545c8f186aa5f8c
BLAKE2b-256 09e8fcee3e037349750491460d7635cdefe6aaaeedb78352a9040d1eaf90eb2f

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp39-cp39-win_arm64.whl
Algorithm Hash digest
SHA256 1b5dc8e49b87406ed415bcf738f6824d4bc8a449080e02e17613a83c74e45f47
MD5 68c20a6c830c0816e2364795a66ac4aa
BLAKE2b-256 f834ea631bf463c2ea2b405deebc50061fd88c6aa4ecd47560f544a0315bb4c3

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 55818aae8eb052419ed936f3650e33ddfa61644a6820e37cfcb134e2d19b8d7e
MD5 2aa1701c8b43835cc146973a3abfb399
BLAKE2b-256 bcc8808bcb237eb2759e526774c644ef32284ee0b2343f9dd7de07e1eb444ee4

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for winloop-0.5.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 9f233985fbe47500c9c002ae6d2a40699a7d9865f6c8317586b074489956d79c
MD5 238df02f669121a6bfb75c2dd28c1053
BLAKE2b-256 0c07cfe00f2f19942ce81fa22bfe2e6af7f6253a9bfd2936890b9ef2a97f9ee0

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