winloop 0.1.5__tar.gz → 0.1.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- winloop-0.1.7/.flake8 +8 -0
- winloop-0.1.7/MANIFEST.in +9 -0
- winloop-0.1.7/Makefile +55 -0
- {winloop-0.1.5/winloop.egg-info → winloop-0.1.7}/PKG-INFO +9 -7
- {winloop-0.1.5 → winloop-0.1.7}/README.md +3 -3
- winloop-0.1.7/examples/bench/echoclient.py +100 -0
- winloop-0.1.7/examples/bench/echoserver.py +212 -0
- winloop-0.1.7/examples/bench/rlserver.py +93 -0
- winloop-0.1.7/mypy.ini +6 -0
- {winloop-0.1.5 → winloop-0.1.7}/pyproject.toml +7 -5
- {winloop-0.1.5 → winloop-0.1.7}/setup.py +12 -3
- winloop-0.1.7/tests/__main__.py +16 -0
- winloop-0.1.7/tests/certs/ssl_cert.pem +34 -0
- winloop-0.1.7/tests/certs/ssl_key.pem +40 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_aiodns.py +8 -3
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_aiohttp.py +5 -1
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_aiomultiprocess.py +7 -7
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_base.py +8 -1
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_dns.py +14 -2
- winloop-0.1.7/tests/test_playwright.py +38 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_process.py +2 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_tcp.py +19 -13
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_unix.py +24 -16
- winloop-0.1.7/vendor/libuv/.git +1 -0
- winloop-0.1.7/vendor/libuv/.gitattributes +1 -0
- winloop-0.1.7/vendor/libuv/.github/ISSUE_TEMPLATE.md +13 -0
- winloop-0.1.7/vendor/libuv/.github/dependabot.yml +7 -0
- winloop-0.1.7/vendor/libuv/.github/workflows/CI-docs.yml +25 -0
- winloop-0.1.7/vendor/libuv/.github/workflows/CI-sample.yml +33 -0
- winloop-0.1.7/vendor/libuv/.github/workflows/CI-unix.yml +153 -0
- winloop-0.1.7/vendor/libuv/.github/workflows/CI-win.yml +130 -0
- winloop-0.1.7/vendor/libuv/.github/workflows/sanitizer.yml +128 -0
- winloop-0.1.7/vendor/libuv/.gitignore +80 -0
- winloop-0.1.7/vendor/libuv/.mailmap +67 -0
- winloop-0.1.7/vendor/libuv/.readthedocs.yaml +15 -0
- winloop-0.1.7/vendor/libuv/AUTHORS +569 -0
- winloop-0.1.7/vendor/libuv/CMakeLists.txt +808 -0
- winloop-0.1.7/vendor/libuv/CONTRIBUTING.md +171 -0
- winloop-0.1.7/vendor/libuv/ChangeLog +6100 -0
- winloop-0.1.7/vendor/libuv/LICENSE +19 -0
- winloop-0.1.7/vendor/libuv/LICENSE-docs +396 -0
- winloop-0.1.7/vendor/libuv/LICENSE-extra +36 -0
- winloop-0.1.7/vendor/libuv/LINKS.md +109 -0
- winloop-0.1.7/vendor/libuv/MAINTAINERS.md +56 -0
- winloop-0.1.7/vendor/libuv/Makefile.am +560 -0
- winloop-0.1.7/vendor/libuv/README.md +357 -0
- winloop-0.1.7/vendor/libuv/SECURITY.md +27 -0
- winloop-0.1.7/vendor/libuv/SUPPORTED_PLATFORMS.md +68 -0
- winloop-0.1.7/vendor/libuv/autogen.sh +75 -0
- winloop-0.1.7/vendor/libuv/cmake-toolchains/cross-mingw32.cmake +17 -0
- winloop-0.1.7/vendor/libuv/configure.ac +92 -0
- winloop-0.1.7/vendor/libuv/include/uv/aix.h +32 -0
- winloop-0.1.7/vendor/libuv/include/uv/bsd.h +34 -0
- winloop-0.1.7/vendor/libuv/include/uv/darwin.h +61 -0
- winloop-0.1.7/vendor/libuv/include/uv/errno.h +477 -0
- winloop-0.1.7/vendor/libuv/include/uv/linux.h +34 -0
- winloop-0.1.7/vendor/libuv/include/uv/os390.h +33 -0
- winloop-0.1.7/vendor/libuv/include/uv/posix.h +31 -0
- winloop-0.1.7/vendor/libuv/include/uv/sunos.h +44 -0
- winloop-0.1.7/vendor/libuv/include/uv/threadpool.h +37 -0
- winloop-0.1.7/vendor/libuv/include/uv/tree.h +768 -0
- winloop-0.1.7/vendor/libuv/include/uv/unix.h +509 -0
- winloop-0.1.7/vendor/libuv/include/uv/version.h +43 -0
- winloop-0.1.7/vendor/libuv/include/uv/win.h +703 -0
- winloop-0.1.7/vendor/libuv/include/uv.h +1968 -0
- winloop-0.1.7/vendor/libuv/libuv-static.pc.in +12 -0
- winloop-0.1.7/vendor/libuv/libuv.pc.in +13 -0
- winloop-0.1.7/vendor/libuv/m4/.gitignore +5 -0
- winloop-0.1.7/vendor/libuv/m4/as_case.m4 +21 -0
- winloop-0.1.7/vendor/libuv/m4/ax_pthread.m4 +485 -0
- winloop-0.1.7/vendor/libuv/m4/libuv-check-flags.m4 +336 -0
- winloop-0.1.7/vendor/libuv/m4/libuv-check-versions.m4 +7 -0
- winloop-0.1.7/vendor/libuv/src/fs-poll.c +287 -0
- winloop-0.1.7/vendor/libuv/src/heap-inl.h +245 -0
- winloop-0.1.7/vendor/libuv/src/idna.c +560 -0
- winloop-0.1.7/vendor/libuv/src/idna.h +31 -0
- winloop-0.1.7/vendor/libuv/src/inet.c +298 -0
- winloop-0.1.7/vendor/libuv/src/queue.h +90 -0
- winloop-0.1.7/vendor/libuv/src/random.c +123 -0
- winloop-0.1.7/vendor/libuv/src/strscpy.c +38 -0
- winloop-0.1.7/vendor/libuv/src/strscpy.h +39 -0
- winloop-0.1.7/vendor/libuv/src/strtok.c +52 -0
- winloop-0.1.7/vendor/libuv/src/strtok.h +27 -0
- winloop-0.1.7/vendor/libuv/src/thread-common.c +175 -0
- winloop-0.1.7/vendor/libuv/src/threadpool.c +418 -0
- winloop-0.1.7/vendor/libuv/src/timer.c +200 -0
- winloop-0.1.7/vendor/libuv/src/unix/aix-common.c +89 -0
- winloop-0.1.7/vendor/libuv/src/unix/aix.c +1320 -0
- winloop-0.1.7/vendor/libuv/src/unix/async.c +329 -0
- winloop-0.1.7/vendor/libuv/src/unix/bsd-ifaddrs.c +163 -0
- winloop-0.1.7/vendor/libuv/src/unix/bsd-proctitle.c +99 -0
- winloop-0.1.7/vendor/libuv/src/unix/core.c +1960 -0
- winloop-0.1.7/vendor/libuv/src/unix/cygwin.c +93 -0
- winloop-0.1.7/vendor/libuv/src/unix/darwin-proctitle.c +192 -0
- winloop-0.1.7/vendor/libuv/src/unix/darwin-stub.h +97 -0
- winloop-0.1.7/vendor/libuv/src/unix/darwin.c +237 -0
- winloop-0.1.7/vendor/libuv/src/unix/dl.c +80 -0
- winloop-0.1.7/vendor/libuv/src/unix/freebsd.c +285 -0
- winloop-0.1.7/vendor/libuv/src/unix/fs.c +2307 -0
- winloop-0.1.7/vendor/libuv/src/unix/fsevents.c +910 -0
- winloop-0.1.7/vendor/libuv/src/unix/getaddrinfo.c +252 -0
- winloop-0.1.7/vendor/libuv/src/unix/getnameinfo.c +121 -0
- winloop-0.1.7/vendor/libuv/src/unix/haiku.c +172 -0
- winloop-0.1.7/vendor/libuv/src/unix/hurd.c +172 -0
- winloop-0.1.7/vendor/libuv/src/unix/ibmi.c +542 -0
- winloop-0.1.7/vendor/libuv/src/unix/internal.h +498 -0
- winloop-0.1.7/vendor/libuv/src/unix/kqueue.c +624 -0
- winloop-0.1.7/vendor/libuv/src/unix/linux.c +2679 -0
- winloop-0.1.7/vendor/libuv/src/unix/loop-watcher.c +68 -0
- winloop-0.1.7/vendor/libuv/src/unix/loop.c +228 -0
- winloop-0.1.7/vendor/libuv/src/unix/netbsd.c +264 -0
- winloop-0.1.7/vendor/libuv/src/unix/no-fsevents.c +42 -0
- winloop-0.1.7/vendor/libuv/src/unix/no-proctitle.c +45 -0
- winloop-0.1.7/vendor/libuv/src/unix/openbsd.c +245 -0
- winloop-0.1.7/vendor/libuv/src/unix/os390-proctitle.c +136 -0
- winloop-0.1.7/vendor/libuv/src/unix/os390-syscalls.c +536 -0
- winloop-0.1.7/vendor/libuv/src/unix/os390-syscalls.h +75 -0
- winloop-0.1.7/vendor/libuv/src/unix/os390.c +1070 -0
- winloop-0.1.7/vendor/libuv/src/unix/pipe.c +542 -0
- winloop-0.1.7/vendor/libuv/src/unix/poll.c +160 -0
- winloop-0.1.7/vendor/libuv/src/unix/posix-hrtime.c +36 -0
- winloop-0.1.7/vendor/libuv/src/unix/posix-poll.c +385 -0
- winloop-0.1.7/vendor/libuv/src/unix/process.c +1110 -0
- winloop-0.1.7/vendor/libuv/src/unix/procfs-exepath.c +45 -0
- winloop-0.1.7/vendor/libuv/src/unix/proctitle.c +157 -0
- winloop-0.1.7/vendor/libuv/src/unix/qnx.c +142 -0
- winloop-0.1.7/vendor/libuv/src/unix/random-devurandom.c +93 -0
- winloop-0.1.7/vendor/libuv/src/unix/random-getentropy.c +57 -0
- winloop-0.1.7/vendor/libuv/src/unix/random-getrandom.c +86 -0
- winloop-0.1.7/vendor/libuv/src/unix/random-sysctl-linux.c +99 -0
- winloop-0.1.7/vendor/libuv/src/unix/signal.c +575 -0
- winloop-0.1.7/vendor/libuv/src/unix/stream.c +1566 -0
- winloop-0.1.7/vendor/libuv/src/unix/sunos.c +907 -0
- winloop-0.1.7/vendor/libuv/src/unix/sysinfo-loadavg.c +36 -0
- winloop-0.1.7/vendor/libuv/src/unix/sysinfo-memory.c +42 -0
- winloop-0.1.7/vendor/libuv/src/unix/tcp.c +673 -0
- winloop-0.1.7/vendor/libuv/src/unix/thread.c +877 -0
- winloop-0.1.7/vendor/libuv/src/unix/tty.c +472 -0
- winloop-0.1.7/vendor/libuv/src/unix/udp.c +1390 -0
- winloop-0.1.7/vendor/libuv/src/uv-common.c +1029 -0
- winloop-0.1.7/vendor/libuv/src/uv-common.h +433 -0
- winloop-0.1.7/vendor/libuv/src/uv-data-getter-setters.c +119 -0
- winloop-0.1.7/vendor/libuv/src/version.c +45 -0
- winloop-0.1.7/vendor/libuv/src/win/async.c +98 -0
- winloop-0.1.7/vendor/libuv/src/win/atomicops-inl.h +61 -0
- winloop-0.1.7/vendor/libuv/src/win/core.c +777 -0
- winloop-0.1.7/vendor/libuv/src/win/detect-wakeup.c +56 -0
- winloop-0.1.7/vendor/libuv/src/win/dl.c +135 -0
- winloop-0.1.7/vendor/libuv/src/win/error.c +174 -0
- winloop-0.1.7/vendor/libuv/src/win/fs-event.c +598 -0
- winloop-0.1.7/vendor/libuv/src/win/fs-fd-hash-inl.h +200 -0
- winloop-0.1.7/vendor/libuv/src/win/fs.c +3426 -0
- winloop-0.1.7/vendor/libuv/src/win/getaddrinfo.c +383 -0
- winloop-0.1.7/vendor/libuv/src/win/getnameinfo.c +146 -0
- winloop-0.1.7/vendor/libuv/src/win/handle-inl.h +180 -0
- winloop-0.1.7/vendor/libuv/src/win/handle.c +162 -0
- winloop-0.1.7/vendor/libuv/src/win/internal.h +333 -0
- winloop-0.1.7/vendor/libuv/src/win/loop-watcher.c +122 -0
- winloop-0.1.7/vendor/libuv/src/win/pipe.c +2673 -0
- winloop-0.1.7/vendor/libuv/src/win/poll.c +586 -0
- winloop-0.1.7/vendor/libuv/src/win/process-stdio.c +416 -0
- winloop-0.1.7/vendor/libuv/src/win/process.c +1397 -0
- winloop-0.1.7/vendor/libuv/src/win/req-inl.h +214 -0
- winloop-0.1.7/vendor/libuv/src/win/signal.c +282 -0
- winloop-0.1.7/vendor/libuv/src/win/snprintf.c +42 -0
- winloop-0.1.7/vendor/libuv/src/win/stream-inl.h +54 -0
- winloop-0.1.7/vendor/libuv/src/win/stream.c +252 -0
- winloop-0.1.7/vendor/libuv/src/win/tcp.c +1674 -0
- winloop-0.1.7/vendor/libuv/src/win/thread.c +470 -0
- winloop-0.1.7/vendor/libuv/src/win/tty.c +2422 -0
- winloop-0.1.7/vendor/libuv/src/win/udp.c +1143 -0
- winloop-0.1.7/vendor/libuv/src/win/util.c +1707 -0
- winloop-0.1.7/vendor/libuv/src/win/winapi.c +147 -0
- winloop-0.1.7/vendor/libuv/src/win/winapi.h +4769 -0
- winloop-0.1.7/vendor/libuv/src/win/winsock.c +575 -0
- winloop-0.1.7/vendor/libuv/src/win/winsock.h +201 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-async-pummel.c +120 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-async.c +142 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-fs-stat.c +138 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-getaddrinfo.c +92 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-list.h +173 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-loop-count.c +134 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-million-async.c +113 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-million-timers.c +86 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-multi-accept.c +451 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-ping-pongs.c +221 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-ping-udp.c +169 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-pound.c +351 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-pump.c +478 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-queue-work.c +71 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-sizes.c +46 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-spawn.c +164 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-tcp-write-batch.c +144 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-thread.c +64 -0
- winloop-0.1.7/vendor/libuv/test/benchmark-udp-pummel.c +243 -0
- winloop-0.1.7/vendor/libuv/test/blackhole-server.c +122 -0
- winloop-0.1.7/vendor/libuv/test/echo-server.c +431 -0
- winloop-0.1.7/vendor/libuv/test/fixtures/empty_file +0 -0
- winloop-0.1.7/vendor/libuv/test/fixtures/load_error.node +1 -0
- winloop-0.1.7/vendor/libuv/test/fixtures/lorem_ipsum.txt +1 -0
- winloop-0.1.7/vendor/libuv/test/fixtures/one_file/one_file +0 -0
- winloop-0.1.7/vendor/libuv/test/run-benchmarks.c +72 -0
- winloop-0.1.7/vendor/libuv/test/run-tests.c +269 -0
- winloop-0.1.7/vendor/libuv/test/runner-unix.c +456 -0
- winloop-0.1.7/vendor/libuv/test/runner-unix.h +36 -0
- winloop-0.1.7/vendor/libuv/test/runner-win.c +346 -0
- winloop-0.1.7/vendor/libuv/test/runner-win.h +41 -0
- winloop-0.1.7/vendor/libuv/test/runner.c +435 -0
- winloop-0.1.7/vendor/libuv/test/runner.h +172 -0
- winloop-0.1.7/vendor/libuv/test/task.h +384 -0
- winloop-0.1.7/vendor/libuv/test/test-active.c +84 -0
- winloop-0.1.7/vendor/libuv/test/test-async-null-cb.c +64 -0
- winloop-0.1.7/vendor/libuv/test/test-async.c +134 -0
- winloop-0.1.7/vendor/libuv/test/test-barrier.c +160 -0
- winloop-0.1.7/vendor/libuv/test/test-callback-stack.c +209 -0
- winloop-0.1.7/vendor/libuv/test/test-close-fd.c +84 -0
- winloop-0.1.7/vendor/libuv/test/test-close-order.c +80 -0
- winloop-0.1.7/vendor/libuv/test/test-condvar.c +248 -0
- winloop-0.1.7/vendor/libuv/test/test-connect-unspecified.c +64 -0
- winloop-0.1.7/vendor/libuv/test/test-connection-fail.c +161 -0
- winloop-0.1.7/vendor/libuv/test/test-cwd-and-chdir.c +57 -0
- winloop-0.1.7/vendor/libuv/test/test-default-loop-close.c +58 -0
- winloop-0.1.7/vendor/libuv/test/test-delayed-accept.c +189 -0
- winloop-0.1.7/vendor/libuv/test/test-dlerror.c +65 -0
- winloop-0.1.7/vendor/libuv/test/test-eintr-handling.c +96 -0
- winloop-0.1.7/vendor/libuv/test/test-embed.c +79 -0
- winloop-0.1.7/vendor/libuv/test/test-emfile.c +121 -0
- winloop-0.1.7/vendor/libuv/test/test-env-vars.c +178 -0
- winloop-0.1.7/vendor/libuv/test/test-error.c +82 -0
- winloop-0.1.7/vendor/libuv/test/test-fail-always.c +29 -0
- winloop-0.1.7/vendor/libuv/test/test-fork.c +769 -0
- winloop-0.1.7/vendor/libuv/test/test-fs-copyfile.c +232 -0
- winloop-0.1.7/vendor/libuv/test/test-fs-event.c +1237 -0
- winloop-0.1.7/vendor/libuv/test/test-fs-fd-hash.c +133 -0
- winloop-0.1.7/vendor/libuv/test/test-fs-open-flags.c +435 -0
- winloop-0.1.7/vendor/libuv/test/test-fs-poll.c +292 -0
- winloop-0.1.7/vendor/libuv/test/test-fs-readdir.c +462 -0
- winloop-0.1.7/vendor/libuv/test/test-fs.c +4642 -0
- winloop-0.1.7/vendor/libuv/test/test-get-currentexe.c +109 -0
- winloop-0.1.7/vendor/libuv/test/test-get-loadavg.c +35 -0
- winloop-0.1.7/vendor/libuv/test/test-get-memory.c +53 -0
- winloop-0.1.7/vendor/libuv/test/test-get-passwd.c +211 -0
- winloop-0.1.7/vendor/libuv/test/test-getaddrinfo.c +215 -0
- winloop-0.1.7/vendor/libuv/test/test-gethostname.c +58 -0
- winloop-0.1.7/vendor/libuv/test/test-getnameinfo.c +116 -0
- winloop-0.1.7/vendor/libuv/test/test-getsockname.c +362 -0
- winloop-0.1.7/vendor/libuv/test/test-getters-setters.c +114 -0
- winloop-0.1.7/vendor/libuv/test/test-gettimeofday.c +39 -0
- winloop-0.1.7/vendor/libuv/test/test-handle-fileno.c +125 -0
- winloop-0.1.7/vendor/libuv/test/test-homedir.c +72 -0
- winloop-0.1.7/vendor/libuv/test/test-hrtime.c +65 -0
- winloop-0.1.7/vendor/libuv/test/test-idle.c +125 -0
- winloop-0.1.7/vendor/libuv/test/test-idna.c +220 -0
- winloop-0.1.7/vendor/libuv/test/test-iouring-pollhup.c +111 -0
- winloop-0.1.7/vendor/libuv/test/test-ip-name.c +65 -0
- winloop-0.1.7/vendor/libuv/test/test-ip4-addr.c +55 -0
- winloop-0.1.7/vendor/libuv/test/test-ip6-addr.c +175 -0
- winloop-0.1.7/vendor/libuv/test/test-ipc-heavy-traffic-deadlock-bug.c +159 -0
- winloop-0.1.7/vendor/libuv/test/test-ipc-send-recv.c +435 -0
- winloop-0.1.7/vendor/libuv/test/test-ipc.c +857 -0
- winloop-0.1.7/vendor/libuv/test/test-list.h +1243 -0
- winloop-0.1.7/vendor/libuv/test/test-loop-alive.c +68 -0
- winloop-0.1.7/vendor/libuv/test/test-loop-close.c +77 -0
- winloop-0.1.7/vendor/libuv/test/test-loop-configure.c +38 -0
- winloop-0.1.7/vendor/libuv/test/test-loop-handles.c +337 -0
- winloop-0.1.7/vendor/libuv/test/test-loop-stop.c +83 -0
- winloop-0.1.7/vendor/libuv/test/test-loop-time.c +69 -0
- winloop-0.1.7/vendor/libuv/test/test-metrics.c +390 -0
- winloop-0.1.7/vendor/libuv/test/test-multiple-listen.c +109 -0
- winloop-0.1.7/vendor/libuv/test/test-mutexes.c +182 -0
- winloop-0.1.7/vendor/libuv/test/test-not-readable-nor-writable-on-read-error.c +104 -0
- winloop-0.1.7/vendor/libuv/test/test-not-writable-after-shutdown.c +69 -0
- winloop-0.1.7/vendor/libuv/test/test-osx-select.c +140 -0
- winloop-0.1.7/vendor/libuv/test/test-pass-always.c +28 -0
- winloop-0.1.7/vendor/libuv/test/test-ping-pong.c +439 -0
- winloop-0.1.7/vendor/libuv/test/test-pipe-bind-error.c +199 -0
- winloop-0.1.7/vendor/libuv/test/test-pipe-close-stdout-read-stdin.c +122 -0
- winloop-0.1.7/vendor/libuv/test/test-pipe-connect-error.c +97 -0
- winloop-0.1.7/vendor/libuv/test/test-pipe-connect-multiple.c +178 -0
- winloop-0.1.7/vendor/libuv/test/test-pipe-connect-prepare.c +83 -0
- winloop-0.1.7/vendor/libuv/test/test-pipe-getsockname.c +290 -0
- winloop-0.1.7/vendor/libuv/test/test-pipe-pending-instances.c +59 -0
- winloop-0.1.7/vendor/libuv/test/test-pipe-sendmsg.c +172 -0
- winloop-0.1.7/vendor/libuv/test/test-pipe-server-close.c +94 -0
- winloop-0.1.7/vendor/libuv/test/test-pipe-set-fchmod.c +92 -0
- winloop-0.1.7/vendor/libuv/test/test-pipe-set-non-blocking.c +131 -0
- winloop-0.1.7/vendor/libuv/test/test-platform-output.c +240 -0
- winloop-0.1.7/vendor/libuv/test/test-poll-close-doesnt-corrupt-stack.c +114 -0
- winloop-0.1.7/vendor/libuv/test/test-poll-close.c +73 -0
- winloop-0.1.7/vendor/libuv/test/test-poll-closesocket.c +92 -0
- winloop-0.1.7/vendor/libuv/test/test-poll-multiple-handles.c +104 -0
- winloop-0.1.7/vendor/libuv/test/test-poll-oob.c +214 -0
- winloop-0.1.7/vendor/libuv/test/test-poll.c +697 -0
- winloop-0.1.7/vendor/libuv/test/test-process-priority.c +83 -0
- winloop-0.1.7/vendor/libuv/test/test-process-title-threadsafe.c +108 -0
- winloop-0.1.7/vendor/libuv/test/test-process-title.c +135 -0
- winloop-0.1.7/vendor/libuv/test/test-queue-foreach-delete.c +205 -0
- winloop-0.1.7/vendor/libuv/test/test-random.c +94 -0
- winloop-0.1.7/vendor/libuv/test/test-readable-on-eof.c +110 -0
- winloop-0.1.7/vendor/libuv/test/test-ref.c +445 -0
- winloop-0.1.7/vendor/libuv/test/test-run-nowait.c +46 -0
- winloop-0.1.7/vendor/libuv/test/test-run-once.c +48 -0
- winloop-0.1.7/vendor/libuv/test/test-semaphore.c +111 -0
- winloop-0.1.7/vendor/libuv/test/test-shutdown-close.c +108 -0
- winloop-0.1.7/vendor/libuv/test/test-shutdown-eof.c +188 -0
- winloop-0.1.7/vendor/libuv/test/test-shutdown-simultaneous.c +135 -0
- winloop-0.1.7/vendor/libuv/test/test-shutdown-twice.c +85 -0
- winloop-0.1.7/vendor/libuv/test/test-signal-multiple-loops.c +325 -0
- winloop-0.1.7/vendor/libuv/test/test-signal-pending-on-close.c +116 -0
- winloop-0.1.7/vendor/libuv/test/test-signal.c +325 -0
- winloop-0.1.7/vendor/libuv/test/test-socket-buffer-size.c +77 -0
- winloop-0.1.7/vendor/libuv/test/test-spawn.c +2114 -0
- winloop-0.1.7/vendor/libuv/test/test-stdio-over-pipes.c +299 -0
- winloop-0.1.7/vendor/libuv/test/test-strscpy.c +53 -0
- winloop-0.1.7/vendor/libuv/test/test-strtok.c +90 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-alloc-cb-fail.c +123 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-bind-error.c +317 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-bind6-error.c +176 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-close-accept.c +198 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-close-after-read-timeout.c +183 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-close-reset.c +340 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-close-while-connecting.c +97 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-close.c +136 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-connect-error-after-write.c +98 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-connect-error.c +73 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-connect-timeout.c +196 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-connect6-error.c +129 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-create-socket-early.c +213 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-flags.c +59 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-oob.c +146 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-open.c +407 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-read-stop-start.c +136 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-read-stop.c +76 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-reuseport.c +248 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-rst.c +110 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-shutdown-after-write.c +138 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-try-write-error.c +109 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-try-write.c +135 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-unexpected-read.c +117 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-write-after-connect.c +77 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-write-fail.c +115 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-write-in-a-row.c +143 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-write-queue-order.c +139 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-write-to-half-open-connection.c +141 -0
- winloop-0.1.7/vendor/libuv/test/test-tcp-writealot.c +185 -0
- winloop-0.1.7/vendor/libuv/test/test-test-macros.c +42 -0
- winloop-0.1.7/vendor/libuv/test/test-thread-affinity.c +154 -0
- winloop-0.1.7/vendor/libuv/test/test-thread-equal.c +51 -0
- winloop-0.1.7/vendor/libuv/test/test-thread-priority.c +105 -0
- winloop-0.1.7/vendor/libuv/test/test-thread.c +296 -0
- winloop-0.1.7/vendor/libuv/test/test-threadpool-cancel.c +418 -0
- winloop-0.1.7/vendor/libuv/test/test-threadpool.c +76 -0
- winloop-0.1.7/vendor/libuv/test/test-timer-again.c +141 -0
- winloop-0.1.7/vendor/libuv/test/test-timer-from-check.c +80 -0
- winloop-0.1.7/vendor/libuv/test/test-timer.c +453 -0
- winloop-0.1.7/vendor/libuv/test/test-tmpdir.c +82 -0
- winloop-0.1.7/vendor/libuv/test/test-tty-duplicate-key.c +321 -0
- winloop-0.1.7/vendor/libuv/test/test-tty-escape-sequence-processing.c +1632 -0
- winloop-0.1.7/vendor/libuv/test/test-tty.c +468 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-alloc-cb-fail.c +196 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-bind.c +93 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-connect.c +196 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-connect6.c +199 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-create-socket-early.c +139 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-dgram-too-big.c +91 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-ipv6.c +259 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-mmsg.c +149 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-multicast-interface.c +104 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-multicast-interface6.c +108 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-multicast-join.c +184 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-multicast-join6.c +218 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-multicast-ttl.c +94 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-open.c +350 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-options.c +160 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-recv-in-a-row.c +121 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-reuseport.c +287 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-send-and-recv.c +212 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-send-hang-loop.c +99 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-send-immediate.c +148 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-send-unreachable.c +201 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-sendmmsg-error.c +75 -0
- winloop-0.1.7/vendor/libuv/test/test-udp-try-send.c +121 -0
- winloop-0.1.7/vendor/libuv/test/test-uname.c +69 -0
- winloop-0.1.7/vendor/libuv/test/test-walk-handles.c +77 -0
- winloop-0.1.7/vendor/libuv/test/test-watcher-cross-stop.c +112 -0
- winloop-0.1.7/vendor/libuv/tools/make_dist_html.py +122 -0
- winloop-0.1.7/vendor/libuv/tools/vswhere_usability_wrapper.cmd +33 -0
- winloop-0.1.7/vendor/libuv/tsansupp.txt +2 -0
- winloop-0.1.7/vendor/libuv/uv_win_longpath.manifest +8 -0
- {winloop-0.1.5 → winloop-0.1.7}/winloop/__init__.py +3 -1
- {winloop-0.1.5 → winloop-0.1.7}/winloop/_testbase.py +4 -2
- {winloop-0.1.5 → winloop-0.1.7}/winloop/_version.py +1 -1
- winloop-0.1.7/winloop/cbhandles.pxd +39 -0
- winloop-0.1.7/winloop/cbhandles.pyx +434 -0
- winloop-0.1.7/winloop/dns.pyx +491 -0
- winloop-0.1.7/winloop/errors.pyx +83 -0
- winloop-0.1.7/winloop/handles/async_.pxd +11 -0
- winloop-0.1.7/winloop/handles/async_.pyx +56 -0
- winloop-0.1.7/winloop/handles/basetransport.pxd +54 -0
- winloop-0.1.7/winloop/handles/basetransport.pyx +293 -0
- winloop-0.1.7/winloop/handles/check.pxd +14 -0
- winloop-0.1.7/winloop/handles/check.pyx +72 -0
- winloop-0.1.7/winloop/handles/fsevent.pxd +12 -0
- winloop-0.1.7/winloop/handles/fsevent.pyx +116 -0
- winloop-0.1.7/winloop/handles/handle.pxd +48 -0
- winloop-0.1.7/winloop/handles/handle.pyx +395 -0
- winloop-0.1.7/winloop/handles/idle.pxd +14 -0
- winloop-0.1.7/winloop/handles/idle.pyx +72 -0
- winloop-0.1.7/winloop/handles/pipe.pxd +33 -0
- winloop-0.1.7/winloop/handles/pipe.pyx +247 -0
- winloop-0.1.7/winloop/handles/poll.pxd +25 -0
- winloop-0.1.7/winloop/handles/poll.pyx +237 -0
- winloop-0.1.7/winloop/handles/process.pxd +80 -0
- winloop-0.1.7/winloop/handles/process.pyx +844 -0
- winloop-0.1.7/winloop/handles/stream.pxd +50 -0
- winloop-0.1.7/winloop/handles/stream.pyx +1038 -0
- winloop-0.1.7/winloop/handles/streamserver.pxd +26 -0
- winloop-0.1.7/winloop/handles/streamserver.pyx +150 -0
- winloop-0.1.7/winloop/handles/tcp.pxd +26 -0
- winloop-0.1.7/winloop/handles/tcp.pyx +228 -0
- winloop-0.1.7/winloop/handles/timer.pxd +18 -0
- winloop-0.1.7/winloop/handles/timer.pyx +89 -0
- winloop-0.1.7/winloop/handles/udp.pxd +22 -0
- winloop-0.1.7/winloop/handles/udp.pyx +408 -0
- winloop-0.1.7/winloop/includes/__init__.py +23 -0
- winloop-0.1.7/winloop/includes/compat.h +178 -0
- winloop-0.1.7/winloop/includes/consts.pxi +32 -0
- winloop-0.1.7/winloop/includes/debug.h +3 -0
- winloop-0.1.7/winloop/includes/debug.pxd +3 -0
- winloop-0.1.7/winloop/includes/flowcontrol.pxd +23 -0
- winloop-0.1.7/winloop/includes/fork_handler.h +56 -0
- winloop-0.1.7/winloop/includes/python.pxd +31 -0
- winloop-0.1.7/winloop/includes/stdlib.pxi +179 -0
- winloop-0.1.7/winloop/includes/system.pxd +82 -0
- winloop-0.1.7/winloop/includes/uv.pxd +517 -0
- {winloop-0.1.5 → winloop-0.1.7}/winloop/loop.c +17892 -16291
- winloop-0.1.7/winloop/loop.pxd +230 -0
- winloop-0.1.7/winloop/loop.pyx +3441 -0
- winloop-0.1.7/winloop/lru.pyx +79 -0
- winloop-0.1.7/winloop/pseudosock.pyx +209 -0
- winloop-0.1.7/winloop/py.typed +0 -0
- winloop-0.1.7/winloop/request.pxd +8 -0
- winloop-0.1.7/winloop/request.pyx +65 -0
- winloop-0.1.7/winloop/server.pxd +19 -0
- winloop-0.1.7/winloop/server.pyx +136 -0
- winloop-0.1.7/winloop/sslproto.pxd +138 -0
- winloop-0.1.7/winloop/sslproto.pyx +950 -0
- {winloop-0.1.5 → winloop-0.1.7/winloop.egg-info}/PKG-INFO +9 -7
- winloop-0.1.7/winloop.egg-info/SOURCES.txt +473 -0
- {winloop-0.1.5 → winloop-0.1.7}/winloop.egg-info/requires.txt +5 -7
- winloop-0.1.7/winloop.png +0 -0
- winloop-0.1.5/winloop.egg-info/SOURCES.txt +0 -41
- {winloop-0.1.5 → winloop-0.1.7}/LICENSE-APACHE +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/LICENSE-MIT +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/setup.cfg +0 -0
- /winloop-0.1.5/winloop/py.typed → /winloop-0.1.7/tests/__init__.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_context.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_cython.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_dealloc.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_executors.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_fs_event.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_libuv_api.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_pipes.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_process_spawning.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_regr1.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_runner.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_signals.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_sockets.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_sourcecode.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_testbase.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/tests/test_udp.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/winloop/_noop.py +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/winloop/loop.pyi +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/winloop.egg-info/dependency_links.txt +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/winloop.egg-info/not-zip-safe +0 -0
- {winloop-0.1.5 → winloop-0.1.7}/winloop.egg-info/top_level.txt +0 -0
winloop-0.1.7/.flake8
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
[flake8]
|
|
2
|
+
filename = *.py,*.pyi
|
|
3
|
+
ignore = E402,E731,D100,D101,D102,D103,D104,D105,W503,W504,E252
|
|
4
|
+
exclude = .git,__pycache__,build,dist,.eggs,postgres,vendor
|
|
5
|
+
|
|
6
|
+
per-file-ignores =
|
|
7
|
+
*.pyx,*.pxd,*.pxi: E211, E222, E225, E226, E227, E999
|
|
8
|
+
*.pyi: F401, F403, F405, F811, E127, E128, E203, E266, E301, E302, E305, E501, E701, E704, E741, B303, W503, W504
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
recursive-include docs *.py *.rst
|
|
2
|
+
recursive-include examples *.py
|
|
3
|
+
recursive-include tests *.py *.pem
|
|
4
|
+
recursive-include winloop *.pyx *.pxd *.pxi *.py *.c *.h *.pyi py.typed
|
|
5
|
+
recursive-include vendor/libuv *
|
|
6
|
+
recursive-exclude vendor/libuv/.git *
|
|
7
|
+
recursive-exclude vendor/libuv/docs *
|
|
8
|
+
recursive-exclude vendor/libuv/img *
|
|
9
|
+
include LICENSE-MIT LICENSE-APACHE README.md Makefile winloop.png .flake8 mypy.ini
|
winloop-0.1.7/Makefile
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
.PHONY: _default clean clean-libuv distclean compile debug docs test testinstalled release setup-build ci-clean
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
PYTHON ?= python
|
|
5
|
+
ROOT = $(dir $(realpath $(firstword $(MAKEFILE_LIST))))
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
_default: compile
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
clean:
|
|
12
|
+
rm -fr dist/ doc/_build/ *.egg-info winloop/loop.*.pyd uvloop/loop_d.*.pyd
|
|
13
|
+
rm -fr winloop/*.c winloop/*.html winloop/*.so
|
|
14
|
+
rm -fr winloop/handles/*.html winloop/includes/*.html
|
|
15
|
+
find . -name '__pycache__' | xargs rm -rf
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
ci-clean: clean
|
|
19
|
+
rm -fr build/lib.* build/temp.* build/libuv
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
clean-libuv:
|
|
23
|
+
(cd vendor/libuv; git clean -dfX)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
distclean: clean clean-libuv
|
|
27
|
+
rm -fr build/
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
setup-build:
|
|
31
|
+
$(PYTHON) setup.py build_ext --inplace --cython-always
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
compile: clean setup-build
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
debug: clean
|
|
38
|
+
$(PYTHON) setup.py build_ext --inplace --debug \
|
|
39
|
+
--cython-always \
|
|
40
|
+
--cython-annotate \
|
|
41
|
+
--cython-directives="linetrace=True" \
|
|
42
|
+
--define UVLOOP_DEBUG,CYTHON_TRACE,CYTHON_TRACE_NOGIL
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
docs:
|
|
46
|
+
$(PYTHON) setup.py build_ext --inplace build_sphinx
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
test:
|
|
50
|
+
PYTHONASYNCIODEBUG=1 $(PYTHON) -m unittest discover -v tests
|
|
51
|
+
$(PYTHON) -m unittest discover -v tests
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
testinstalled:
|
|
55
|
+
cd "$${HOME}" && $(PYTHON) -m unittest discover -v $(ROOT)/tests
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: winloop
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.7
|
|
4
4
|
Summary: Windows version of uvloop
|
|
5
5
|
Author: Vizonex
|
|
6
6
|
License: MIT License
|
|
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
24
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
24
25
|
Classifier: Topic :: System :: Networking
|
|
25
26
|
Requires-Python: >=3.8.0
|
|
@@ -27,14 +28,15 @@ Description-Content-Type: text/markdown
|
|
|
27
28
|
License-File: LICENSE-APACHE
|
|
28
29
|
License-File: LICENSE-MIT
|
|
29
30
|
Provides-Extra: test
|
|
30
|
-
Requires-Dist: aiohttp>=3.
|
|
31
|
-
Requires-Dist: aiohttp==3.9.0b0; python_version >= "3.12" and extra == "test"
|
|
31
|
+
Requires-Dist: aiohttp>=3.10.5; extra == "test"
|
|
32
32
|
Requires-Dist: flake8~=5.0; extra == "test"
|
|
33
33
|
Requires-Dist: psutil; extra == "test"
|
|
34
34
|
Requires-Dist: pycodestyle~=2.9.0; extra == "test"
|
|
35
35
|
Requires-Dist: pyOpenSSL~=23.0.0; extra == "test"
|
|
36
36
|
Requires-Dist: mypy>=0.800; extra == "test"
|
|
37
|
-
|
|
37
|
+
Provides-Extra: dev
|
|
38
|
+
Requires-Dist: setuptools>=60; extra == "dev"
|
|
39
|
+
Requires-Dist: Cython~=3.0; extra == "dev"
|
|
38
40
|
Provides-Extra: docs
|
|
39
41
|
Requires-Dist: Sphinx~=4.1.2; extra == "docs"
|
|
40
42
|
Requires-Dist: sphinxcontrib-asyncio~=0.3.0; extra == "docs"
|
|
@@ -44,8 +46,8 @@ Requires-Dist: sphinx_rtd_theme~=0.5.2; extra == "docs"
|
|
|
44
46
|
<a href="https://github.com/psf/black"><img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg"></a>
|
|
45
47
|
|
|
46
48
|
# Winloop
|
|
47
|
-
An Alternative library for uvloop compatibility with windows because let's face it. Window's python asyncio standard libaray is garabage
|
|
48
|
-
I never really liked the fact that I couldn't make anything run faster
|
|
49
|
+
An Alternative library for uvloop compatibility with windows because let's face it. Window's python asyncio standard libaray is garabage especially when Windows Defender decides to eat half your ram.
|
|
50
|
+
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.](https://github.com/MagicStack/uvloop/issues/14#issuecomment-575826367])
|
|
49
51
|
|
|
50
52
|
Because 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 exist.
|
|
51
53
|
|
|
@@ -61,7 +63,7 @@ There is a performance increase of about 5 times vs using the `WindowsSelectorEv
|
|
|
61
63
|
pip install winloop
|
|
62
64
|
```
|
|
63
65
|
|
|
64
|
-
You can also clone the
|
|
66
|
+
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
|
|
65
67
|
to compile this library on your own.
|
|
66
68
|
|
|
67
69
|
```
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
<a href="https://github.com/psf/black"><img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg"></a>
|
|
3
3
|
|
|
4
4
|
# Winloop
|
|
5
|
-
An Alternative library for uvloop compatibility with windows because let's face it. Window's python asyncio standard libaray is garabage
|
|
6
|
-
I never really liked the fact that I couldn't make anything run faster
|
|
5
|
+
An Alternative library for uvloop compatibility with windows because let's face it. Window's python asyncio standard libaray is garabage especially when Windows Defender decides to eat half your ram.
|
|
6
|
+
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.](https://github.com/MagicStack/uvloop/issues/14#issuecomment-575826367])
|
|
7
7
|
|
|
8
8
|
Because 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 exist.
|
|
9
9
|
|
|
@@ -19,7 +19,7 @@ There is a performance increase of about 5 times vs using the `WindowsSelectorEv
|
|
|
19
19
|
pip install winloop
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
You can also clone the
|
|
22
|
+
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
|
|
23
23
|
to compile this library on your own.
|
|
24
24
|
|
|
25
25
|
```
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Copied with minimal modifications from curio
|
|
2
|
+
# https://github.com/dabeaz/curio
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
import argparse
|
|
6
|
+
import concurrent.futures
|
|
7
|
+
import socket
|
|
8
|
+
import ssl
|
|
9
|
+
import time
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
if __name__ == '__main__':
|
|
13
|
+
parser = argparse.ArgumentParser()
|
|
14
|
+
parser.add_argument('--msize', default=1000, type=int,
|
|
15
|
+
help='message size in bytes')
|
|
16
|
+
parser.add_argument('--mpr', default=1, type=int,
|
|
17
|
+
help='messages per request')
|
|
18
|
+
parser.add_argument('--num', default=200000, type=int,
|
|
19
|
+
help='number of messages')
|
|
20
|
+
parser.add_argument('--times', default=1, type=int,
|
|
21
|
+
help='number of times to run the test')
|
|
22
|
+
parser.add_argument('--workers', default=3, type=int,
|
|
23
|
+
help='number of workers')
|
|
24
|
+
parser.add_argument('--addr', default='127.0.0.1:25000', type=str,
|
|
25
|
+
help='address:port of echoserver')
|
|
26
|
+
parser.add_argument('--ssl', default=False, action='store_true')
|
|
27
|
+
args = parser.parse_args()
|
|
28
|
+
|
|
29
|
+
client_context = None
|
|
30
|
+
if args.ssl:
|
|
31
|
+
print('with SSL')
|
|
32
|
+
if hasattr(ssl, 'PROTOCOL_TLS'):
|
|
33
|
+
client_context = ssl.SSLContext(ssl.PROTOCOL_TLS)
|
|
34
|
+
else:
|
|
35
|
+
client_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
|
|
36
|
+
if hasattr(client_context, 'check_hostname'):
|
|
37
|
+
client_context.check_hostname = False
|
|
38
|
+
client_context.verify_mode = ssl.CERT_NONE
|
|
39
|
+
|
|
40
|
+
unix = False
|
|
41
|
+
if args.addr.startswith('file:'):
|
|
42
|
+
unix = True
|
|
43
|
+
addr = args.addr[5:]
|
|
44
|
+
else:
|
|
45
|
+
addr = args.addr.split(':')
|
|
46
|
+
addr[1] = int(addr[1])
|
|
47
|
+
addr = tuple(addr)
|
|
48
|
+
print('will connect to: {}'.format(addr))
|
|
49
|
+
|
|
50
|
+
MSGSIZE = args.msize
|
|
51
|
+
REQSIZE = MSGSIZE * args.mpr
|
|
52
|
+
|
|
53
|
+
msg = b'x' * (MSGSIZE - 1) + b'\n'
|
|
54
|
+
if args.mpr:
|
|
55
|
+
msg *= args.mpr
|
|
56
|
+
|
|
57
|
+
def run_test(n):
|
|
58
|
+
print('Sending', NMESSAGES, 'messages')
|
|
59
|
+
if args.mpr:
|
|
60
|
+
n //= args.mpr
|
|
61
|
+
|
|
62
|
+
if unix:
|
|
63
|
+
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
|
64
|
+
else:
|
|
65
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
66
|
+
|
|
67
|
+
try:
|
|
68
|
+
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
|
69
|
+
except (OSError, NameError):
|
|
70
|
+
pass
|
|
71
|
+
|
|
72
|
+
if client_context:
|
|
73
|
+
sock = client_context.wrap_socket(sock)
|
|
74
|
+
|
|
75
|
+
sock.connect(addr)
|
|
76
|
+
|
|
77
|
+
while n > 0:
|
|
78
|
+
sock.sendall(msg)
|
|
79
|
+
nrecv = 0
|
|
80
|
+
while nrecv < REQSIZE:
|
|
81
|
+
resp = sock.recv(REQSIZE)
|
|
82
|
+
if not resp:
|
|
83
|
+
raise SystemExit()
|
|
84
|
+
nrecv += len(resp)
|
|
85
|
+
n -= 1
|
|
86
|
+
|
|
87
|
+
TIMES = args.times
|
|
88
|
+
N = args.workers
|
|
89
|
+
NMESSAGES = args.num
|
|
90
|
+
start = time.time()
|
|
91
|
+
for _ in range(TIMES):
|
|
92
|
+
# Winloop comment: switch from ProcessPoolExecutor to ThreadPoolExecutor
|
|
93
|
+
# to avoid issues with __mp_main__ on Windows.
|
|
94
|
+
with concurrent.futures.ThreadPoolExecutor(max_workers=N) as e:
|
|
95
|
+
for _ in range(N):
|
|
96
|
+
e.submit(run_test, NMESSAGES)
|
|
97
|
+
end = time.time()
|
|
98
|
+
duration = end - start
|
|
99
|
+
print(NMESSAGES * N * TIMES, 'in', duration)
|
|
100
|
+
print(NMESSAGES * N * TIMES / duration, 'requests/sec')
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import asyncio
|
|
3
|
+
import gc
|
|
4
|
+
import os.path
|
|
5
|
+
import pathlib
|
|
6
|
+
import socket
|
|
7
|
+
import ssl
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
PRINT = 0
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
async def echo_server(loop, address, unix):
|
|
14
|
+
if unix:
|
|
15
|
+
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
|
16
|
+
else:
|
|
17
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
18
|
+
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
19
|
+
sock.bind(address)
|
|
20
|
+
sock.listen(5)
|
|
21
|
+
sock.setblocking(False)
|
|
22
|
+
if PRINT:
|
|
23
|
+
print('Server listening at', address)
|
|
24
|
+
with sock:
|
|
25
|
+
while True:
|
|
26
|
+
client, addr = await loop.sock_accept(sock)
|
|
27
|
+
if PRINT:
|
|
28
|
+
print('Connection from', addr)
|
|
29
|
+
loop.create_task(echo_client(loop, client))
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
async def echo_client(loop, client):
|
|
33
|
+
try:
|
|
34
|
+
client.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
|
35
|
+
except (OSError, NameError):
|
|
36
|
+
pass
|
|
37
|
+
|
|
38
|
+
with client:
|
|
39
|
+
while True:
|
|
40
|
+
data = await loop.sock_recv(client, 1000000)
|
|
41
|
+
if not data:
|
|
42
|
+
break
|
|
43
|
+
await loop.sock_sendall(client, data)
|
|
44
|
+
if PRINT:
|
|
45
|
+
print('Connection closed')
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
async def echo_client_streams(reader, writer):
|
|
49
|
+
sock = writer.get_extra_info('socket')
|
|
50
|
+
try:
|
|
51
|
+
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
|
52
|
+
except (OSError, NameError):
|
|
53
|
+
pass
|
|
54
|
+
if PRINT:
|
|
55
|
+
print('Connection from', sock.getpeername())
|
|
56
|
+
while True:
|
|
57
|
+
data = await reader.read(1000000)
|
|
58
|
+
if not data:
|
|
59
|
+
break
|
|
60
|
+
writer.write(data)
|
|
61
|
+
if PRINT:
|
|
62
|
+
print('Connection closed')
|
|
63
|
+
writer.close()
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class EchoProtocol(asyncio.Protocol):
|
|
67
|
+
def connection_made(self, transport):
|
|
68
|
+
self.transport = transport
|
|
69
|
+
|
|
70
|
+
def connection_lost(self, exc):
|
|
71
|
+
self.transport = None
|
|
72
|
+
|
|
73
|
+
def data_received(self, data):
|
|
74
|
+
self.transport.write(data)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class EchoBufferedProtocol(asyncio.BufferedProtocol):
|
|
78
|
+
def connection_made(self, transport):
|
|
79
|
+
self.transport = transport
|
|
80
|
+
# Here the buffer is intended to be copied, so that the outgoing buffer
|
|
81
|
+
# won't be wrongly updated by next read
|
|
82
|
+
self.buffer = bytearray(256 * 1024)
|
|
83
|
+
|
|
84
|
+
def connection_lost(self, exc):
|
|
85
|
+
self.transport = None
|
|
86
|
+
|
|
87
|
+
def get_buffer(self, sizehint):
|
|
88
|
+
return self.buffer
|
|
89
|
+
|
|
90
|
+
def buffer_updated(self, nbytes):
|
|
91
|
+
self.transport.write(self.buffer[:nbytes])
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
async def print_debug(loop):
|
|
95
|
+
while True:
|
|
96
|
+
print(chr(27) + "[2J") # clear screen
|
|
97
|
+
loop.print_debug_info()
|
|
98
|
+
await asyncio.sleep(0.5)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
if __name__ == '__main__':
|
|
102
|
+
parser = argparse.ArgumentParser()
|
|
103
|
+
parser.add_argument('--uvloop', default=False, action='store_true')
|
|
104
|
+
parser.add_argument('--streams', default=False, action='store_true')
|
|
105
|
+
parser.add_argument('--proto', default=False, action='store_true')
|
|
106
|
+
parser.add_argument('--addr', default='127.0.0.1:25000', type=str)
|
|
107
|
+
parser.add_argument('--print', default=False, action='store_true')
|
|
108
|
+
parser.add_argument('--ssl', default=False, action='store_true')
|
|
109
|
+
parser.add_argument('--buffered', default=False, action='store_true')
|
|
110
|
+
args = parser.parse_args()
|
|
111
|
+
|
|
112
|
+
if args.uvloop:
|
|
113
|
+
import winloop as uvloop
|
|
114
|
+
loop = uvloop.new_event_loop()
|
|
115
|
+
print('using UVLoop')
|
|
116
|
+
else:
|
|
117
|
+
loop = asyncio.new_event_loop()
|
|
118
|
+
print('using asyncio loop')
|
|
119
|
+
|
|
120
|
+
asyncio.set_event_loop(loop)
|
|
121
|
+
loop.set_debug(False)
|
|
122
|
+
|
|
123
|
+
if args.print:
|
|
124
|
+
PRINT = 1
|
|
125
|
+
|
|
126
|
+
if hasattr(loop, 'print_debug_info'):
|
|
127
|
+
loop.create_task(print_debug(loop))
|
|
128
|
+
PRINT = 0
|
|
129
|
+
|
|
130
|
+
unix = False
|
|
131
|
+
if args.addr.startswith('file:'):
|
|
132
|
+
unix = True
|
|
133
|
+
addr = args.addr[5:]
|
|
134
|
+
if os.path.exists(addr):
|
|
135
|
+
os.remove(addr)
|
|
136
|
+
else:
|
|
137
|
+
addr = args.addr.split(':')
|
|
138
|
+
addr[1] = int(addr[1])
|
|
139
|
+
addr = tuple(addr)
|
|
140
|
+
|
|
141
|
+
print('serving on: {}'.format(addr))
|
|
142
|
+
|
|
143
|
+
server_context = None
|
|
144
|
+
if args.ssl:
|
|
145
|
+
print('with SSL')
|
|
146
|
+
if hasattr(ssl, 'PROTOCOL_TLS'):
|
|
147
|
+
server_context = ssl.SSLContext(ssl.PROTOCOL_TLS)
|
|
148
|
+
else:
|
|
149
|
+
server_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
|
|
150
|
+
server_context.load_cert_chain(
|
|
151
|
+
(pathlib.Path(__file__).parent.parent.parent /
|
|
152
|
+
'tests' / 'certs' / 'ssl_cert.pem'),
|
|
153
|
+
(pathlib.Path(__file__).parent.parent.parent /
|
|
154
|
+
'tests' / 'certs' / 'ssl_key.pem'))
|
|
155
|
+
if hasattr(server_context, 'check_hostname'):
|
|
156
|
+
server_context.check_hostname = False
|
|
157
|
+
server_context.verify_mode = ssl.CERT_NONE
|
|
158
|
+
|
|
159
|
+
if args.streams:
|
|
160
|
+
if args.proto:
|
|
161
|
+
print('cannot use --stream and --proto simultaneously')
|
|
162
|
+
exit(1)
|
|
163
|
+
|
|
164
|
+
if args.buffered:
|
|
165
|
+
print('cannot use --stream and --buffered simultaneously')
|
|
166
|
+
exit(1)
|
|
167
|
+
|
|
168
|
+
print('using asyncio/streams')
|
|
169
|
+
if unix:
|
|
170
|
+
coro = asyncio.start_unix_server(echo_client_streams,
|
|
171
|
+
addr,
|
|
172
|
+
ssl=server_context)
|
|
173
|
+
else:
|
|
174
|
+
coro = asyncio.start_server(echo_client_streams,
|
|
175
|
+
*addr,
|
|
176
|
+
ssl=server_context)
|
|
177
|
+
srv = loop.run_until_complete(coro)
|
|
178
|
+
elif args.proto:
|
|
179
|
+
if args.streams:
|
|
180
|
+
print('cannot use --stream and --proto simultaneously')
|
|
181
|
+
exit(1)
|
|
182
|
+
|
|
183
|
+
if args.buffered:
|
|
184
|
+
print('using buffered protocol')
|
|
185
|
+
protocol = EchoBufferedProtocol
|
|
186
|
+
else:
|
|
187
|
+
print('using simple protocol')
|
|
188
|
+
protocol = EchoProtocol
|
|
189
|
+
|
|
190
|
+
if unix:
|
|
191
|
+
coro = loop.create_unix_server(protocol, addr,
|
|
192
|
+
ssl=server_context)
|
|
193
|
+
else:
|
|
194
|
+
coro = loop.create_server(protocol, *addr,
|
|
195
|
+
ssl=server_context)
|
|
196
|
+
srv = loop.run_until_complete(coro)
|
|
197
|
+
else:
|
|
198
|
+
if args.ssl:
|
|
199
|
+
print('cannot use SSL for loop.sock_* methods')
|
|
200
|
+
exit(1)
|
|
201
|
+
|
|
202
|
+
print('using sock_recv/sock_sendall')
|
|
203
|
+
loop.create_task(echo_server(loop, addr, unix))
|
|
204
|
+
try:
|
|
205
|
+
loop.run_forever()
|
|
206
|
+
finally:
|
|
207
|
+
if hasattr(loop, 'print_debug_info'):
|
|
208
|
+
gc.collect()
|
|
209
|
+
print(chr(27) + "[2J")
|
|
210
|
+
loop.print_debug_info()
|
|
211
|
+
|
|
212
|
+
loop.close()
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import asyncio
|
|
3
|
+
import gc
|
|
4
|
+
import os.path
|
|
5
|
+
import socket as stdsock
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
PRINT = 0
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
async def echo_client_streams(reader, writer):
|
|
12
|
+
sock = writer.get_extra_info('socket')
|
|
13
|
+
try:
|
|
14
|
+
sock.setsockopt(
|
|
15
|
+
stdsock.IPPROTO_TCP, stdsock.TCP_NODELAY, 1)
|
|
16
|
+
except (OSError, NameError):
|
|
17
|
+
pass
|
|
18
|
+
if PRINT:
|
|
19
|
+
print('Connection from', sock.getpeername())
|
|
20
|
+
while True:
|
|
21
|
+
data = await reader.readline()
|
|
22
|
+
if not data:
|
|
23
|
+
break
|
|
24
|
+
writer.write(data)
|
|
25
|
+
if PRINT:
|
|
26
|
+
print('Connection closed')
|
|
27
|
+
writer.close()
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
async def print_debug(loop):
|
|
31
|
+
while True:
|
|
32
|
+
print(chr(27) + "[2J") # clear screen
|
|
33
|
+
loop.print_debug_info()
|
|
34
|
+
await asyncio.sleep(0.5)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
if __name__ == '__main__':
|
|
38
|
+
parser = argparse.ArgumentParser()
|
|
39
|
+
parser.add_argument('--uvloop', default=False, action='store_true')
|
|
40
|
+
parser.add_argument('--addr', default='127.0.0.1:25000', type=str)
|
|
41
|
+
parser.add_argument('--print', default=False, action='store_true')
|
|
42
|
+
args = parser.parse_args()
|
|
43
|
+
|
|
44
|
+
if args.uvloop:
|
|
45
|
+
import winloop as uvloop
|
|
46
|
+
loop = uvloop.new_event_loop()
|
|
47
|
+
print('using UVLoop')
|
|
48
|
+
else:
|
|
49
|
+
loop = asyncio.new_event_loop()
|
|
50
|
+
print('using asyncio loop')
|
|
51
|
+
|
|
52
|
+
asyncio.set_event_loop(loop)
|
|
53
|
+
loop.set_debug(False)
|
|
54
|
+
|
|
55
|
+
if args.print:
|
|
56
|
+
PRINT = 1
|
|
57
|
+
|
|
58
|
+
if hasattr(loop, 'print_debug_info'):
|
|
59
|
+
loop.create_task(print_debug(loop))
|
|
60
|
+
PRINT = 0
|
|
61
|
+
|
|
62
|
+
unix = False
|
|
63
|
+
if args.addr.startswith('file:'):
|
|
64
|
+
unix = True
|
|
65
|
+
addr = args.addr[5:]
|
|
66
|
+
if os.path.exists(addr):
|
|
67
|
+
os.remove(addr)
|
|
68
|
+
else:
|
|
69
|
+
addr = args.addr.split(':')
|
|
70
|
+
addr[1] = int(addr[1])
|
|
71
|
+
addr = tuple(addr)
|
|
72
|
+
|
|
73
|
+
print('readline performance test')
|
|
74
|
+
print('serving on: {}'.format(addr))
|
|
75
|
+
|
|
76
|
+
print('using asyncio/streams')
|
|
77
|
+
if unix:
|
|
78
|
+
coro = asyncio.start_unix_server(echo_client_streams,
|
|
79
|
+
addr, limit=256000)
|
|
80
|
+
else:
|
|
81
|
+
coro = asyncio.start_server(echo_client_streams,
|
|
82
|
+
*addr, limit=256000)
|
|
83
|
+
srv = loop.run_until_complete(coro)
|
|
84
|
+
|
|
85
|
+
try:
|
|
86
|
+
loop.run_forever()
|
|
87
|
+
finally:
|
|
88
|
+
if hasattr(loop, 'print_debug_info'):
|
|
89
|
+
gc.collect()
|
|
90
|
+
print(chr(27) + "[2J")
|
|
91
|
+
loop.print_debug_info()
|
|
92
|
+
|
|
93
|
+
loop.close()
|
winloop-0.1.7/mypy.ini
ADDED
|
@@ -25,6 +25,7 @@ classifiers = [
|
|
|
25
25
|
"Programming Language :: Python :: 3.10",
|
|
26
26
|
"Programming Language :: Python :: 3.11",
|
|
27
27
|
"Programming Language :: Python :: 3.12",
|
|
28
|
+
"Programming Language :: Python :: 3.13",
|
|
28
29
|
"Programming Language :: Python :: Implementation :: CPython",
|
|
29
30
|
"Topic :: System :: Networking",
|
|
30
31
|
]
|
|
@@ -37,14 +38,16 @@ test = [
|
|
|
37
38
|
# pycodestyle is a dependency of flake8, but it must be frozen because
|
|
38
39
|
# their combination breaks too often
|
|
39
40
|
# (example breakage: https://gitlab.com/pycqa/flake8/issues/427)
|
|
40
|
-
'aiohttp>=3.
|
|
41
|
-
'aiohttp==3.9.0b0; python_version >= "3.12"',
|
|
41
|
+
'aiohttp>=3.10.5',
|
|
42
42
|
'flake8~=5.0',
|
|
43
43
|
'psutil',
|
|
44
44
|
'pycodestyle~=2.9.0',
|
|
45
45
|
'pyOpenSSL~=23.0.0',
|
|
46
46
|
'mypy>=0.800',
|
|
47
|
-
|
|
47
|
+
]
|
|
48
|
+
dev = [
|
|
49
|
+
'setuptools>=60',
|
|
50
|
+
'Cython~=3.0',
|
|
48
51
|
]
|
|
49
52
|
docs = [
|
|
50
53
|
'Sphinx~=4.1.2',
|
|
@@ -56,7 +59,7 @@ docs = [
|
|
|
56
59
|
requires = [
|
|
57
60
|
"setuptools>=60",
|
|
58
61
|
"wheel",
|
|
59
|
-
"Cython
|
|
62
|
+
"Cython~=3.0",
|
|
60
63
|
]
|
|
61
64
|
build-backend = "setuptools.build_meta"
|
|
62
65
|
|
|
@@ -69,7 +72,6 @@ packages = ["winloop"]
|
|
|
69
72
|
|
|
70
73
|
[tool.cibuildwheel]
|
|
71
74
|
build-frontend = "build"
|
|
72
|
-
# Winloop comment: skip tests for now ("ImportError: cannot import name 'includes' from ... " in GitHub action)
|
|
73
75
|
#test-extras = "test"
|
|
74
76
|
#test-command = "python -m unittest discover -v {project}/tests"
|
|
75
77
|
|
|
@@ -20,7 +20,7 @@ from setuptools.command.build_ext import build_ext
|
|
|
20
20
|
from setuptools.command.sdist import sdist
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
CYTHON_DEPENDENCY = 'Cython
|
|
23
|
+
CYTHON_DEPENDENCY = 'Cython~=3.0'
|
|
24
24
|
MACHINE = platform.machine()
|
|
25
25
|
MODULES_CFLAGS = [os.getenv('UVLOOP_OPT_CFLAGS', '-O2')]
|
|
26
26
|
_ROOT = pathlib.Path(__file__).parent
|
|
@@ -140,11 +140,14 @@ class uvloop_build_ext(build_ext):
|
|
|
140
140
|
v = True
|
|
141
141
|
|
|
142
142
|
directives[k] = v
|
|
143
|
+
self.cython_directives = directives
|
|
143
144
|
|
|
144
145
|
self.distribution.ext_modules[:] = cythonize(
|
|
145
146
|
self.distribution.ext_modules,
|
|
146
147
|
compiler_directives=directives,
|
|
147
|
-
annotate=self.cython_annotate
|
|
148
|
+
annotate=self.cython_annotate,
|
|
149
|
+
compile_time_env=dict(DEFAULT_FREELIST_SIZE=250),
|
|
150
|
+
emit_linenums=self.debug)
|
|
148
151
|
|
|
149
152
|
super().finalize_options()
|
|
150
153
|
|
|
@@ -176,7 +179,11 @@ class uvloop_build_ext(build_ext):
|
|
|
176
179
|
cmd,
|
|
177
180
|
cwd=LIBUV_BUILD_DIR, env=env, check=True)
|
|
178
181
|
|
|
179
|
-
|
|
182
|
+
try:
|
|
183
|
+
njobs = len(os.sched_getaffinity(0))
|
|
184
|
+
except AttributeError:
|
|
185
|
+
njobs = os.cpu_count()
|
|
186
|
+
j_flag = '-j{}'.format(njobs or 1)
|
|
180
187
|
c_flag = "CFLAGS={}".format(env['CFLAGS'])
|
|
181
188
|
subprocess.run(
|
|
182
189
|
['make', j_flag, c_flag],
|
|
@@ -233,6 +240,8 @@ with open(str(_ROOT / 'winloop' / '_version.py')) as f:
|
|
|
233
240
|
|
|
234
241
|
if sys.platform == 'win32':
|
|
235
242
|
from Cython.Build import cythonize
|
|
243
|
+
from Cython.Compiler.Main import default_options
|
|
244
|
+
default_options['compile_time_env'] = dict(DEFAULT_FREELIST_SIZE=250)
|
|
236
245
|
ext = cythonize([
|
|
237
246
|
Extension(
|
|
238
247
|
"winloop.loop",
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import os.path
|
|
2
|
+
import sys
|
|
3
|
+
import unittest
|
|
4
|
+
import unittest.runner
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def suite():
|
|
8
|
+
test_loader = unittest.TestLoader()
|
|
9
|
+
test_suite = test_loader.discover(os.path.dirname(__file__))
|
|
10
|
+
return test_suite
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
if __name__ == '__main__':
|
|
14
|
+
runner = unittest.runner.TextTestRunner()
|
|
15
|
+
result = runner.run(suite())
|
|
16
|
+
sys.exit(not result.wasSuccessful())
|