winloop 0.1.1__tar.gz → 0.1.8__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.
Files changed (481) hide show
  1. winloop-0.1.8/.flake8 +8 -0
  2. winloop-0.1.8/MANIFEST.in +9 -0
  3. winloop-0.1.8/Makefile +55 -0
  4. {winloop-0.1.1/winloop.egg-info → winloop-0.1.8}/PKG-INFO +87 -50
  5. {winloop-0.1.1 → winloop-0.1.8}/README.md +52 -41
  6. winloop-0.1.8/examples/bench/echoclient.py +100 -0
  7. winloop-0.1.8/examples/bench/echoserver.py +212 -0
  8. winloop-0.1.8/examples/bench/rlserver.py +93 -0
  9. winloop-0.1.8/mypy.ini +6 -0
  10. winloop-0.1.8/pyproject.toml +81 -0
  11. winloop-0.1.8/setup.py +298 -0
  12. winloop-0.1.8/tests/__init__.py +0 -0
  13. winloop-0.1.8/tests/__main__.py +16 -0
  14. winloop-0.1.8/tests/certs/ssl_cert.pem +34 -0
  15. winloop-0.1.8/tests/certs/ssl_key.pem +40 -0
  16. winloop-0.1.8/tests/test_aiodns.py +45 -0
  17. winloop-0.1.8/tests/test_aiohttp.py +137 -0
  18. winloop-0.1.8/tests/test_aiomultiprocess.py +60 -0
  19. winloop-0.1.8/tests/test_base.py +958 -0
  20. winloop-0.1.8/tests/test_context.py +791 -0
  21. winloop-0.1.8/tests/test_cython.py +35 -0
  22. winloop-0.1.8/tests/test_dealloc.py +61 -0
  23. winloop-0.1.8/tests/test_dns.py +279 -0
  24. winloop-0.1.8/tests/test_executors.py +47 -0
  25. winloop-0.1.8/tests/test_fs_event.py +105 -0
  26. winloop-0.1.8/tests/test_libuv_api.py +23 -0
  27. winloop-0.1.8/tests/test_pipes.py +304 -0
  28. winloop-0.1.8/tests/test_playwright.py +38 -0
  29. winloop-0.1.8/tests/test_process.py +1049 -0
  30. winloop-0.1.8/tests/test_process_spawning.py +115 -0
  31. winloop-0.1.8/tests/test_regr1.py +120 -0
  32. winloop-0.1.8/tests/test_runner.py +39 -0
  33. winloop-0.1.8/tests/test_signals.py +470 -0
  34. winloop-0.1.8/tests/test_sockets.py +767 -0
  35. winloop-0.1.8/tests/test_sourcecode.py +72 -0
  36. winloop-0.1.8/tests/test_tcp.py +3225 -0
  37. winloop-0.1.8/tests/test_testbase.py +51 -0
  38. winloop-0.1.8/tests/test_udp.py +414 -0
  39. winloop-0.1.8/tests/test_unix.py +708 -0
  40. winloop-0.1.8/vendor/libuv/.git +1 -0
  41. winloop-0.1.8/vendor/libuv/.gitattributes +1 -0
  42. winloop-0.1.8/vendor/libuv/.github/ISSUE_TEMPLATE.md +13 -0
  43. winloop-0.1.8/vendor/libuv/.github/dependabot.yml +7 -0
  44. winloop-0.1.8/vendor/libuv/.github/workflows/CI-docs.yml +25 -0
  45. winloop-0.1.8/vendor/libuv/.github/workflows/CI-sample.yml +33 -0
  46. winloop-0.1.8/vendor/libuv/.github/workflows/CI-unix.yml +179 -0
  47. winloop-0.1.8/vendor/libuv/.github/workflows/CI-win.yml +129 -0
  48. winloop-0.1.8/vendor/libuv/.github/workflows/sanitizer.yml +128 -0
  49. winloop-0.1.8/vendor/libuv/.gitignore +80 -0
  50. winloop-0.1.8/vendor/libuv/.mailmap +70 -0
  51. winloop-0.1.8/vendor/libuv/.readthedocs.yaml +15 -0
  52. winloop-0.1.8/vendor/libuv/AUTHORS +592 -0
  53. winloop-0.1.8/vendor/libuv/CMakeLists.txt +813 -0
  54. winloop-0.1.8/vendor/libuv/CONTRIBUTING.md +171 -0
  55. winloop-0.1.8/vendor/libuv/ChangeLog +6351 -0
  56. winloop-0.1.8/vendor/libuv/LICENSE +19 -0
  57. winloop-0.1.8/vendor/libuv/LICENSE-docs +396 -0
  58. winloop-0.1.8/vendor/libuv/LICENSE-extra +36 -0
  59. winloop-0.1.8/vendor/libuv/LINKS.md +109 -0
  60. winloop-0.1.8/vendor/libuv/MAINTAINERS.md +56 -0
  61. winloop-0.1.8/vendor/libuv/Makefile.am +561 -0
  62. winloop-0.1.8/vendor/libuv/README.md +357 -0
  63. winloop-0.1.8/vendor/libuv/SECURITY.md +27 -0
  64. winloop-0.1.8/vendor/libuv/SUPPORTED_PLATFORMS.md +68 -0
  65. winloop-0.1.8/vendor/libuv/autogen.sh +75 -0
  66. winloop-0.1.8/vendor/libuv/cmake-toolchains/cross-mingw32.cmake +17 -0
  67. winloop-0.1.8/vendor/libuv/configure.ac +92 -0
  68. winloop-0.1.8/vendor/libuv/include/uv/aix.h +32 -0
  69. winloop-0.1.8/vendor/libuv/include/uv/bsd.h +34 -0
  70. winloop-0.1.8/vendor/libuv/include/uv/darwin.h +61 -0
  71. winloop-0.1.8/vendor/libuv/include/uv/errno.h +477 -0
  72. winloop-0.1.8/vendor/libuv/include/uv/linux.h +34 -0
  73. winloop-0.1.8/vendor/libuv/include/uv/os390.h +33 -0
  74. winloop-0.1.8/vendor/libuv/include/uv/posix.h +31 -0
  75. winloop-0.1.8/vendor/libuv/include/uv/sunos.h +44 -0
  76. winloop-0.1.8/vendor/libuv/include/uv/threadpool.h +37 -0
  77. winloop-0.1.8/vendor/libuv/include/uv/tree.h +521 -0
  78. winloop-0.1.8/vendor/libuv/include/uv/unix.h +509 -0
  79. winloop-0.1.8/vendor/libuv/include/uv/version.h +43 -0
  80. winloop-0.1.8/vendor/libuv/include/uv/win.h +703 -0
  81. winloop-0.1.8/vendor/libuv/include/uv.h +1970 -0
  82. winloop-0.1.8/vendor/libuv/libuv-static.pc.in +12 -0
  83. winloop-0.1.8/vendor/libuv/libuv.pc.in +13 -0
  84. winloop-0.1.8/vendor/libuv/m4/.gitignore +5 -0
  85. winloop-0.1.8/vendor/libuv/m4/as_case.m4 +21 -0
  86. winloop-0.1.8/vendor/libuv/m4/ax_pthread.m4 +485 -0
  87. winloop-0.1.8/vendor/libuv/m4/libuv-check-flags.m4 +336 -0
  88. winloop-0.1.8/vendor/libuv/m4/libuv-check-versions.m4 +7 -0
  89. winloop-0.1.8/vendor/libuv/src/fs-poll.c +287 -0
  90. winloop-0.1.8/vendor/libuv/src/heap-inl.h +245 -0
  91. winloop-0.1.8/vendor/libuv/src/idna.c +560 -0
  92. winloop-0.1.8/vendor/libuv/src/idna.h +31 -0
  93. winloop-0.1.8/vendor/libuv/src/inet.c +298 -0
  94. winloop-0.1.8/vendor/libuv/src/queue.h +90 -0
  95. winloop-0.1.8/vendor/libuv/src/random.c +123 -0
  96. winloop-0.1.8/vendor/libuv/src/strscpy.c +38 -0
  97. winloop-0.1.8/vendor/libuv/src/strscpy.h +39 -0
  98. winloop-0.1.8/vendor/libuv/src/strtok.c +52 -0
  99. winloop-0.1.8/vendor/libuv/src/strtok.h +27 -0
  100. winloop-0.1.8/vendor/libuv/src/thread-common.c +175 -0
  101. winloop-0.1.8/vendor/libuv/src/threadpool.c +418 -0
  102. winloop-0.1.8/vendor/libuv/src/timer.c +200 -0
  103. winloop-0.1.8/vendor/libuv/src/unix/aix-common.c +89 -0
  104. winloop-0.1.8/vendor/libuv/src/unix/aix.c +1320 -0
  105. winloop-0.1.8/vendor/libuv/src/unix/async.c +329 -0
  106. winloop-0.1.8/vendor/libuv/src/unix/bsd-ifaddrs.c +163 -0
  107. winloop-0.1.8/vendor/libuv/src/unix/bsd-proctitle.c +99 -0
  108. winloop-0.1.8/vendor/libuv/src/unix/core.c +2038 -0
  109. winloop-0.1.8/vendor/libuv/src/unix/cygwin.c +93 -0
  110. winloop-0.1.8/vendor/libuv/src/unix/darwin-proctitle.c +192 -0
  111. winloop-0.1.8/vendor/libuv/src/unix/darwin-stub.h +97 -0
  112. winloop-0.1.8/vendor/libuv/src/unix/darwin-syscalls.h +17 -0
  113. winloop-0.1.8/vendor/libuv/src/unix/darwin.c +237 -0
  114. winloop-0.1.8/vendor/libuv/src/unix/dl.c +80 -0
  115. winloop-0.1.8/vendor/libuv/src/unix/freebsd.c +290 -0
  116. winloop-0.1.8/vendor/libuv/src/unix/fs.c +2319 -0
  117. winloop-0.1.8/vendor/libuv/src/unix/fsevents.c +906 -0
  118. winloop-0.1.8/vendor/libuv/src/unix/getaddrinfo.c +252 -0
  119. winloop-0.1.8/vendor/libuv/src/unix/getnameinfo.c +121 -0
  120. winloop-0.1.8/vendor/libuv/src/unix/haiku.c +172 -0
  121. winloop-0.1.8/vendor/libuv/src/unix/hurd.c +172 -0
  122. winloop-0.1.8/vendor/libuv/src/unix/ibmi.c +542 -0
  123. winloop-0.1.8/vendor/libuv/src/unix/internal.h +507 -0
  124. winloop-0.1.8/vendor/libuv/src/unix/kqueue.c +657 -0
  125. winloop-0.1.8/vendor/libuv/src/unix/linux.c +2708 -0
  126. winloop-0.1.8/vendor/libuv/src/unix/loop-watcher.c +68 -0
  127. winloop-0.1.8/vendor/libuv/src/unix/loop.c +236 -0
  128. winloop-0.1.8/vendor/libuv/src/unix/netbsd.c +264 -0
  129. winloop-0.1.8/vendor/libuv/src/unix/no-fsevents.c +42 -0
  130. winloop-0.1.8/vendor/libuv/src/unix/no-proctitle.c +45 -0
  131. winloop-0.1.8/vendor/libuv/src/unix/openbsd.c +245 -0
  132. winloop-0.1.8/vendor/libuv/src/unix/os390-proctitle.c +136 -0
  133. winloop-0.1.8/vendor/libuv/src/unix/os390-syscalls.c +536 -0
  134. winloop-0.1.8/vendor/libuv/src/unix/os390-syscalls.h +75 -0
  135. winloop-0.1.8/vendor/libuv/src/unix/os390.c +1070 -0
  136. winloop-0.1.8/vendor/libuv/src/unix/pipe.c +557 -0
  137. winloop-0.1.8/vendor/libuv/src/unix/poll.c +160 -0
  138. winloop-0.1.8/vendor/libuv/src/unix/posix-hrtime.c +36 -0
  139. winloop-0.1.8/vendor/libuv/src/unix/posix-poll.c +385 -0
  140. winloop-0.1.8/vendor/libuv/src/unix/process.c +1110 -0
  141. winloop-0.1.8/vendor/libuv/src/unix/procfs-exepath.c +45 -0
  142. winloop-0.1.8/vendor/libuv/src/unix/proctitle.c +157 -0
  143. winloop-0.1.8/vendor/libuv/src/unix/qnx.c +142 -0
  144. winloop-0.1.8/vendor/libuv/src/unix/random-devurandom.c +93 -0
  145. winloop-0.1.8/vendor/libuv/src/unix/random-getentropy.c +57 -0
  146. winloop-0.1.8/vendor/libuv/src/unix/random-getrandom.c +86 -0
  147. winloop-0.1.8/vendor/libuv/src/unix/random-sysctl-linux.c +99 -0
  148. winloop-0.1.8/vendor/libuv/src/unix/signal.c +575 -0
  149. winloop-0.1.8/vendor/libuv/src/unix/stream.c +1567 -0
  150. winloop-0.1.8/vendor/libuv/src/unix/sunos.c +907 -0
  151. winloop-0.1.8/vendor/libuv/src/unix/sysinfo-loadavg.c +36 -0
  152. winloop-0.1.8/vendor/libuv/src/unix/sysinfo-memory.c +42 -0
  153. winloop-0.1.8/vendor/libuv/src/unix/tcp.c +673 -0
  154. winloop-0.1.8/vendor/libuv/src/unix/thread.c +877 -0
  155. winloop-0.1.8/vendor/libuv/src/unix/tty.c +503 -0
  156. winloop-0.1.8/vendor/libuv/src/unix/udp.c +1403 -0
  157. winloop-0.1.8/vendor/libuv/src/uv-common.c +1029 -0
  158. winloop-0.1.8/vendor/libuv/src/uv-common.h +431 -0
  159. winloop-0.1.8/vendor/libuv/src/uv-data-getter-setters.c +119 -0
  160. winloop-0.1.8/vendor/libuv/src/version.c +45 -0
  161. winloop-0.1.8/vendor/libuv/src/win/async.c +98 -0
  162. winloop-0.1.8/vendor/libuv/src/win/atomicops-inl.h +61 -0
  163. winloop-0.1.8/vendor/libuv/src/win/core.c +777 -0
  164. winloop-0.1.8/vendor/libuv/src/win/detect-wakeup.c +56 -0
  165. winloop-0.1.8/vendor/libuv/src/win/dl.c +135 -0
  166. winloop-0.1.8/vendor/libuv/src/win/error.c +183 -0
  167. winloop-0.1.8/vendor/libuv/src/win/fs-event.c +616 -0
  168. winloop-0.1.8/vendor/libuv/src/win/fs-fd-hash-inl.h +200 -0
  169. winloop-0.1.8/vendor/libuv/src/win/fs.c +3570 -0
  170. winloop-0.1.8/vendor/libuv/src/win/getaddrinfo.c +388 -0
  171. winloop-0.1.8/vendor/libuv/src/win/getnameinfo.c +146 -0
  172. winloop-0.1.8/vendor/libuv/src/win/handle-inl.h +180 -0
  173. winloop-0.1.8/vendor/libuv/src/win/handle.c +162 -0
  174. winloop-0.1.8/vendor/libuv/src/win/internal.h +335 -0
  175. winloop-0.1.8/vendor/libuv/src/win/loop-watcher.c +122 -0
  176. winloop-0.1.8/vendor/libuv/src/win/pipe.c +2719 -0
  177. winloop-0.1.8/vendor/libuv/src/win/poll.c +586 -0
  178. winloop-0.1.8/vendor/libuv/src/win/process-stdio.c +419 -0
  179. winloop-0.1.8/vendor/libuv/src/win/process.c +1397 -0
  180. winloop-0.1.8/vendor/libuv/src/win/req-inl.h +214 -0
  181. winloop-0.1.8/vendor/libuv/src/win/signal.c +282 -0
  182. winloop-0.1.8/vendor/libuv/src/win/snprintf.c +42 -0
  183. winloop-0.1.8/vendor/libuv/src/win/stream-inl.h +54 -0
  184. winloop-0.1.8/vendor/libuv/src/win/stream.c +252 -0
  185. winloop-0.1.8/vendor/libuv/src/win/tcp.c +1674 -0
  186. winloop-0.1.8/vendor/libuv/src/win/thread.c +470 -0
  187. winloop-0.1.8/vendor/libuv/src/win/tty.c +2422 -0
  188. winloop-0.1.8/vendor/libuv/src/win/udp.c +1143 -0
  189. winloop-0.1.8/vendor/libuv/src/win/util.c +1703 -0
  190. winloop-0.1.8/vendor/libuv/src/win/winapi.c +157 -0
  191. winloop-0.1.8/vendor/libuv/src/win/winapi.h +4840 -0
  192. winloop-0.1.8/vendor/libuv/src/win/winsock.c +575 -0
  193. winloop-0.1.8/vendor/libuv/src/win/winsock.h +201 -0
  194. winloop-0.1.8/vendor/libuv/test/benchmark-async-pummel.c +120 -0
  195. winloop-0.1.8/vendor/libuv/test/benchmark-async.c +142 -0
  196. winloop-0.1.8/vendor/libuv/test/benchmark-fs-stat.c +138 -0
  197. winloop-0.1.8/vendor/libuv/test/benchmark-getaddrinfo.c +92 -0
  198. winloop-0.1.8/vendor/libuv/test/benchmark-list.h +173 -0
  199. winloop-0.1.8/vendor/libuv/test/benchmark-loop-count.c +134 -0
  200. winloop-0.1.8/vendor/libuv/test/benchmark-million-async.c +113 -0
  201. winloop-0.1.8/vendor/libuv/test/benchmark-million-timers.c +86 -0
  202. winloop-0.1.8/vendor/libuv/test/benchmark-multi-accept.c +451 -0
  203. winloop-0.1.8/vendor/libuv/test/benchmark-ping-pongs.c +221 -0
  204. winloop-0.1.8/vendor/libuv/test/benchmark-ping-udp.c +169 -0
  205. winloop-0.1.8/vendor/libuv/test/benchmark-pound.c +351 -0
  206. winloop-0.1.8/vendor/libuv/test/benchmark-pump.c +478 -0
  207. winloop-0.1.8/vendor/libuv/test/benchmark-queue-work.c +71 -0
  208. winloop-0.1.8/vendor/libuv/test/benchmark-sizes.c +46 -0
  209. winloop-0.1.8/vendor/libuv/test/benchmark-spawn.c +164 -0
  210. winloop-0.1.8/vendor/libuv/test/benchmark-tcp-write-batch.c +144 -0
  211. winloop-0.1.8/vendor/libuv/test/benchmark-thread.c +64 -0
  212. winloop-0.1.8/vendor/libuv/test/benchmark-udp-pummel.c +243 -0
  213. winloop-0.1.8/vendor/libuv/test/blackhole-server.c +122 -0
  214. winloop-0.1.8/vendor/libuv/test/echo-server.c +431 -0
  215. winloop-0.1.8/vendor/libuv/test/fixtures/empty_file +0 -0
  216. winloop-0.1.8/vendor/libuv/test/fixtures/load_error.node +1 -0
  217. winloop-0.1.8/vendor/libuv/test/fixtures/lorem_ipsum.txt +1 -0
  218. winloop-0.1.8/vendor/libuv/test/fixtures/one_file/one_file +0 -0
  219. winloop-0.1.8/vendor/libuv/test/run-benchmarks.c +72 -0
  220. winloop-0.1.8/vendor/libuv/test/run-tests.c +269 -0
  221. winloop-0.1.8/vendor/libuv/test/runner-unix.c +456 -0
  222. winloop-0.1.8/vendor/libuv/test/runner-unix.h +36 -0
  223. winloop-0.1.8/vendor/libuv/test/runner-win.c +346 -0
  224. winloop-0.1.8/vendor/libuv/test/runner-win.h +41 -0
  225. winloop-0.1.8/vendor/libuv/test/runner.c +435 -0
  226. winloop-0.1.8/vendor/libuv/test/runner.h +172 -0
  227. winloop-0.1.8/vendor/libuv/test/task.h +388 -0
  228. winloop-0.1.8/vendor/libuv/test/test-active.c +84 -0
  229. winloop-0.1.8/vendor/libuv/test/test-async-null-cb.c +64 -0
  230. winloop-0.1.8/vendor/libuv/test/test-async.c +134 -0
  231. winloop-0.1.8/vendor/libuv/test/test-barrier.c +160 -0
  232. winloop-0.1.8/vendor/libuv/test/test-callback-stack.c +209 -0
  233. winloop-0.1.8/vendor/libuv/test/test-close-fd.c +84 -0
  234. winloop-0.1.8/vendor/libuv/test/test-close-order.c +80 -0
  235. winloop-0.1.8/vendor/libuv/test/test-condvar.c +248 -0
  236. winloop-0.1.8/vendor/libuv/test/test-connect-unspecified.c +64 -0
  237. winloop-0.1.8/vendor/libuv/test/test-connection-fail.c +161 -0
  238. winloop-0.1.8/vendor/libuv/test/test-cwd-and-chdir.c +57 -0
  239. winloop-0.1.8/vendor/libuv/test/test-default-loop-close.c +58 -0
  240. winloop-0.1.8/vendor/libuv/test/test-delayed-accept.c +189 -0
  241. winloop-0.1.8/vendor/libuv/test/test-dlerror.c +65 -0
  242. winloop-0.1.8/vendor/libuv/test/test-eintr-handling.c +96 -0
  243. winloop-0.1.8/vendor/libuv/test/test-embed.c +79 -0
  244. winloop-0.1.8/vendor/libuv/test/test-emfile.c +129 -0
  245. winloop-0.1.8/vendor/libuv/test/test-env-vars.c +178 -0
  246. winloop-0.1.8/vendor/libuv/test/test-error.c +82 -0
  247. winloop-0.1.8/vendor/libuv/test/test-fail-always.c +29 -0
  248. winloop-0.1.8/vendor/libuv/test/test-fork.c +769 -0
  249. winloop-0.1.8/vendor/libuv/test/test-fs-copyfile.c +232 -0
  250. winloop-0.1.8/vendor/libuv/test/test-fs-event.c +1213 -0
  251. winloop-0.1.8/vendor/libuv/test/test-fs-fd-hash.c +133 -0
  252. winloop-0.1.8/vendor/libuv/test/test-fs-open-flags.c +435 -0
  253. winloop-0.1.8/vendor/libuv/test/test-fs-poll.c +292 -0
  254. winloop-0.1.8/vendor/libuv/test/test-fs-readdir.c +548 -0
  255. winloop-0.1.8/vendor/libuv/test/test-fs.c +4687 -0
  256. winloop-0.1.8/vendor/libuv/test/test-get-currentexe.c +109 -0
  257. winloop-0.1.8/vendor/libuv/test/test-get-loadavg.c +35 -0
  258. winloop-0.1.8/vendor/libuv/test/test-get-memory.c +53 -0
  259. winloop-0.1.8/vendor/libuv/test/test-get-passwd.c +211 -0
  260. winloop-0.1.8/vendor/libuv/test/test-getaddrinfo.c +215 -0
  261. winloop-0.1.8/vendor/libuv/test/test-gethostname.c +58 -0
  262. winloop-0.1.8/vendor/libuv/test/test-getnameinfo.c +116 -0
  263. winloop-0.1.8/vendor/libuv/test/test-getsockname.c +362 -0
  264. winloop-0.1.8/vendor/libuv/test/test-getters-setters.c +114 -0
  265. winloop-0.1.8/vendor/libuv/test/test-gettimeofday.c +39 -0
  266. winloop-0.1.8/vendor/libuv/test/test-handle-fileno.c +125 -0
  267. winloop-0.1.8/vendor/libuv/test/test-homedir.c +81 -0
  268. winloop-0.1.8/vendor/libuv/test/test-hrtime.c +65 -0
  269. winloop-0.1.8/vendor/libuv/test/test-idle.c +125 -0
  270. winloop-0.1.8/vendor/libuv/test/test-idna.c +220 -0
  271. winloop-0.1.8/vendor/libuv/test/test-iouring-pollhup.c +111 -0
  272. winloop-0.1.8/vendor/libuv/test/test-ip-name.c +65 -0
  273. winloop-0.1.8/vendor/libuv/test/test-ip4-addr.c +55 -0
  274. winloop-0.1.8/vendor/libuv/test/test-ip6-addr.c +175 -0
  275. winloop-0.1.8/vendor/libuv/test/test-ipc-heavy-traffic-deadlock-bug.c +159 -0
  276. winloop-0.1.8/vendor/libuv/test/test-ipc-send-recv.c +435 -0
  277. winloop-0.1.8/vendor/libuv/test/test-ipc.c +857 -0
  278. winloop-0.1.8/vendor/libuv/test/test-list.h +1253 -0
  279. winloop-0.1.8/vendor/libuv/test/test-loop-alive.c +68 -0
  280. winloop-0.1.8/vendor/libuv/test/test-loop-close.c +77 -0
  281. winloop-0.1.8/vendor/libuv/test/test-loop-configure.c +38 -0
  282. winloop-0.1.8/vendor/libuv/test/test-loop-handles.c +337 -0
  283. winloop-0.1.8/vendor/libuv/test/test-loop-stop.c +83 -0
  284. winloop-0.1.8/vendor/libuv/test/test-loop-time.c +69 -0
  285. winloop-0.1.8/vendor/libuv/test/test-metrics.c +390 -0
  286. winloop-0.1.8/vendor/libuv/test/test-multiple-listen.c +109 -0
  287. winloop-0.1.8/vendor/libuv/test/test-mutexes.c +182 -0
  288. winloop-0.1.8/vendor/libuv/test/test-not-readable-nor-writable-on-read-error.c +104 -0
  289. winloop-0.1.8/vendor/libuv/test/test-not-writable-after-shutdown.c +69 -0
  290. winloop-0.1.8/vendor/libuv/test/test-osx-select.c +140 -0
  291. winloop-0.1.8/vendor/libuv/test/test-pass-always.c +28 -0
  292. winloop-0.1.8/vendor/libuv/test/test-ping-pong.c +439 -0
  293. winloop-0.1.8/vendor/libuv/test/test-pipe-bind-error.c +215 -0
  294. winloop-0.1.8/vendor/libuv/test/test-pipe-close-stdout-read-stdin.c +122 -0
  295. winloop-0.1.8/vendor/libuv/test/test-pipe-connect-error.c +97 -0
  296. winloop-0.1.8/vendor/libuv/test/test-pipe-connect-multiple.c +178 -0
  297. winloop-0.1.8/vendor/libuv/test/test-pipe-connect-prepare.c +83 -0
  298. winloop-0.1.8/vendor/libuv/test/test-pipe-getsockname.c +361 -0
  299. winloop-0.1.8/vendor/libuv/test/test-pipe-pending-instances.c +59 -0
  300. winloop-0.1.8/vendor/libuv/test/test-pipe-sendmsg.c +172 -0
  301. winloop-0.1.8/vendor/libuv/test/test-pipe-server-close.c +94 -0
  302. winloop-0.1.8/vendor/libuv/test/test-pipe-set-fchmod.c +92 -0
  303. winloop-0.1.8/vendor/libuv/test/test-pipe-set-non-blocking.c +131 -0
  304. winloop-0.1.8/vendor/libuv/test/test-platform-output.c +240 -0
  305. winloop-0.1.8/vendor/libuv/test/test-poll-close-doesnt-corrupt-stack.c +114 -0
  306. winloop-0.1.8/vendor/libuv/test/test-poll-close.c +73 -0
  307. winloop-0.1.8/vendor/libuv/test/test-poll-closesocket.c +92 -0
  308. winloop-0.1.8/vendor/libuv/test/test-poll-multiple-handles.c +104 -0
  309. winloop-0.1.8/vendor/libuv/test/test-poll-oob.c +214 -0
  310. winloop-0.1.8/vendor/libuv/test/test-poll.c +730 -0
  311. winloop-0.1.8/vendor/libuv/test/test-process-priority.c +83 -0
  312. winloop-0.1.8/vendor/libuv/test/test-process-title-threadsafe.c +108 -0
  313. winloop-0.1.8/vendor/libuv/test/test-process-title.c +135 -0
  314. winloop-0.1.8/vendor/libuv/test/test-queue-foreach-delete.c +205 -0
  315. winloop-0.1.8/vendor/libuv/test/test-random.c +94 -0
  316. winloop-0.1.8/vendor/libuv/test/test-readable-on-eof.c +110 -0
  317. winloop-0.1.8/vendor/libuv/test/test-ref.c +445 -0
  318. winloop-0.1.8/vendor/libuv/test/test-run-nowait.c +46 -0
  319. winloop-0.1.8/vendor/libuv/test/test-run-once.c +48 -0
  320. winloop-0.1.8/vendor/libuv/test/test-semaphore.c +111 -0
  321. winloop-0.1.8/vendor/libuv/test/test-shutdown-close.c +108 -0
  322. winloop-0.1.8/vendor/libuv/test/test-shutdown-eof.c +188 -0
  323. winloop-0.1.8/vendor/libuv/test/test-shutdown-simultaneous.c +135 -0
  324. winloop-0.1.8/vendor/libuv/test/test-shutdown-twice.c +85 -0
  325. winloop-0.1.8/vendor/libuv/test/test-signal-multiple-loops.c +325 -0
  326. winloop-0.1.8/vendor/libuv/test/test-signal-pending-on-close.c +116 -0
  327. winloop-0.1.8/vendor/libuv/test/test-signal.c +325 -0
  328. winloop-0.1.8/vendor/libuv/test/test-socket-buffer-size.c +77 -0
  329. winloop-0.1.8/vendor/libuv/test/test-spawn.c +2114 -0
  330. winloop-0.1.8/vendor/libuv/test/test-stdio-over-pipes.c +299 -0
  331. winloop-0.1.8/vendor/libuv/test/test-strscpy.c +53 -0
  332. winloop-0.1.8/vendor/libuv/test/test-strtok.c +90 -0
  333. winloop-0.1.8/vendor/libuv/test/test-tcp-alloc-cb-fail.c +123 -0
  334. winloop-0.1.8/vendor/libuv/test/test-tcp-bind-error.c +317 -0
  335. winloop-0.1.8/vendor/libuv/test/test-tcp-bind6-error.c +176 -0
  336. winloop-0.1.8/vendor/libuv/test/test-tcp-close-accept.c +198 -0
  337. winloop-0.1.8/vendor/libuv/test/test-tcp-close-after-read-timeout.c +183 -0
  338. winloop-0.1.8/vendor/libuv/test/test-tcp-close-reset.c +340 -0
  339. winloop-0.1.8/vendor/libuv/test/test-tcp-close-while-connecting.c +97 -0
  340. winloop-0.1.8/vendor/libuv/test/test-tcp-close.c +136 -0
  341. winloop-0.1.8/vendor/libuv/test/test-tcp-connect-error-after-write.c +98 -0
  342. winloop-0.1.8/vendor/libuv/test/test-tcp-connect-error.c +73 -0
  343. winloop-0.1.8/vendor/libuv/test/test-tcp-connect-timeout.c +196 -0
  344. winloop-0.1.8/vendor/libuv/test/test-tcp-connect6-error.c +129 -0
  345. winloop-0.1.8/vendor/libuv/test/test-tcp-create-socket-early.c +213 -0
  346. winloop-0.1.8/vendor/libuv/test/test-tcp-flags.c +59 -0
  347. winloop-0.1.8/vendor/libuv/test/test-tcp-oob.c +146 -0
  348. winloop-0.1.8/vendor/libuv/test/test-tcp-open.c +407 -0
  349. winloop-0.1.8/vendor/libuv/test/test-tcp-read-stop-start.c +136 -0
  350. winloop-0.1.8/vendor/libuv/test/test-tcp-read-stop.c +76 -0
  351. winloop-0.1.8/vendor/libuv/test/test-tcp-reuseport.c +248 -0
  352. winloop-0.1.8/vendor/libuv/test/test-tcp-rst.c +110 -0
  353. winloop-0.1.8/vendor/libuv/test/test-tcp-shutdown-after-write.c +138 -0
  354. winloop-0.1.8/vendor/libuv/test/test-tcp-try-write-error.c +109 -0
  355. winloop-0.1.8/vendor/libuv/test/test-tcp-try-write.c +135 -0
  356. winloop-0.1.8/vendor/libuv/test/test-tcp-unexpected-read.c +117 -0
  357. winloop-0.1.8/vendor/libuv/test/test-tcp-write-after-connect.c +77 -0
  358. winloop-0.1.8/vendor/libuv/test/test-tcp-write-fail.c +115 -0
  359. winloop-0.1.8/vendor/libuv/test/test-tcp-write-in-a-row.c +143 -0
  360. winloop-0.1.8/vendor/libuv/test/test-tcp-write-queue-order.c +139 -0
  361. winloop-0.1.8/vendor/libuv/test/test-tcp-write-to-half-open-connection.c +141 -0
  362. winloop-0.1.8/vendor/libuv/test/test-tcp-writealot.c +185 -0
  363. winloop-0.1.8/vendor/libuv/test/test-test-macros.c +42 -0
  364. winloop-0.1.8/vendor/libuv/test/test-thread-affinity.c +154 -0
  365. winloop-0.1.8/vendor/libuv/test/test-thread-equal.c +51 -0
  366. winloop-0.1.8/vendor/libuv/test/test-thread-priority.c +105 -0
  367. winloop-0.1.8/vendor/libuv/test/test-thread.c +296 -0
  368. winloop-0.1.8/vendor/libuv/test/test-threadpool-cancel.c +418 -0
  369. winloop-0.1.8/vendor/libuv/test/test-threadpool.c +76 -0
  370. winloop-0.1.8/vendor/libuv/test/test-timer-again.c +141 -0
  371. winloop-0.1.8/vendor/libuv/test/test-timer-from-check.c +80 -0
  372. winloop-0.1.8/vendor/libuv/test/test-timer.c +453 -0
  373. winloop-0.1.8/vendor/libuv/test/test-tmpdir.c +89 -0
  374. winloop-0.1.8/vendor/libuv/test/test-tty-duplicate-key.c +321 -0
  375. winloop-0.1.8/vendor/libuv/test/test-tty-escape-sequence-processing.c +1632 -0
  376. winloop-0.1.8/vendor/libuv/test/test-tty.c +468 -0
  377. winloop-0.1.8/vendor/libuv/test/test-udp-alloc-cb-fail.c +196 -0
  378. winloop-0.1.8/vendor/libuv/test/test-udp-bind.c +93 -0
  379. winloop-0.1.8/vendor/libuv/test/test-udp-connect.c +196 -0
  380. winloop-0.1.8/vendor/libuv/test/test-udp-connect6.c +199 -0
  381. winloop-0.1.8/vendor/libuv/test/test-udp-create-socket-early.c +139 -0
  382. winloop-0.1.8/vendor/libuv/test/test-udp-dgram-too-big.c +91 -0
  383. winloop-0.1.8/vendor/libuv/test/test-udp-ipv6.c +259 -0
  384. winloop-0.1.8/vendor/libuv/test/test-udp-mmsg.c +149 -0
  385. winloop-0.1.8/vendor/libuv/test/test-udp-multicast-interface.c +104 -0
  386. winloop-0.1.8/vendor/libuv/test/test-udp-multicast-interface6.c +108 -0
  387. winloop-0.1.8/vendor/libuv/test/test-udp-multicast-join.c +184 -0
  388. winloop-0.1.8/vendor/libuv/test/test-udp-multicast-join6.c +223 -0
  389. winloop-0.1.8/vendor/libuv/test/test-udp-multicast-ttl.c +94 -0
  390. winloop-0.1.8/vendor/libuv/test/test-udp-open.c +350 -0
  391. winloop-0.1.8/vendor/libuv/test/test-udp-options.c +160 -0
  392. winloop-0.1.8/vendor/libuv/test/test-udp-recv-in-a-row.c +128 -0
  393. winloop-0.1.8/vendor/libuv/test/test-udp-reuseport.c +287 -0
  394. winloop-0.1.8/vendor/libuv/test/test-udp-send-and-recv.c +212 -0
  395. winloop-0.1.8/vendor/libuv/test/test-udp-send-hang-loop.c +99 -0
  396. winloop-0.1.8/vendor/libuv/test/test-udp-send-immediate.c +148 -0
  397. winloop-0.1.8/vendor/libuv/test/test-udp-send-unreachable.c +201 -0
  398. winloop-0.1.8/vendor/libuv/test/test-udp-sendmmsg-error.c +75 -0
  399. winloop-0.1.8/vendor/libuv/test/test-udp-try-send.c +121 -0
  400. winloop-0.1.8/vendor/libuv/test/test-uname.c +69 -0
  401. winloop-0.1.8/vendor/libuv/test/test-walk-handles.c +77 -0
  402. winloop-0.1.8/vendor/libuv/test/test-watcher-cross-stop.c +112 -0
  403. winloop-0.1.8/vendor/libuv/tools/make_dist_html.py +122 -0
  404. winloop-0.1.8/vendor/libuv/tools/vswhere_usability_wrapper.cmd +33 -0
  405. winloop-0.1.8/vendor/libuv/tsansupp.txt +2 -0
  406. winloop-0.1.8/vendor/libuv/uv_win_longpath.manifest +8 -0
  407. {winloop-0.1.1 → winloop-0.1.8}/winloop/__init__.py +21 -40
  408. {winloop-0.1.1 → winloop-0.1.8}/winloop/_noop.py +0 -1
  409. {winloop-0.1.1 → winloop-0.1.8}/winloop/_testbase.py +17 -9
  410. winloop-0.1.8/winloop/_version.py +13 -0
  411. winloop-0.1.8/winloop/cbhandles.pxd +39 -0
  412. winloop-0.1.8/winloop/cbhandles.pyx +434 -0
  413. winloop-0.1.8/winloop/dns.pyx +496 -0
  414. winloop-0.1.8/winloop/errors.pyx +83 -0
  415. winloop-0.1.8/winloop/handles/async_.pxd +11 -0
  416. winloop-0.1.8/winloop/handles/async_.pyx +56 -0
  417. winloop-0.1.8/winloop/handles/basetransport.pxd +54 -0
  418. winloop-0.1.8/winloop/handles/basetransport.pyx +293 -0
  419. winloop-0.1.8/winloop/handles/check.pxd +14 -0
  420. winloop-0.1.8/winloop/handles/check.pyx +72 -0
  421. winloop-0.1.8/winloop/handles/fsevent.pxd +12 -0
  422. winloop-0.1.8/winloop/handles/fsevent.pyx +116 -0
  423. winloop-0.1.8/winloop/handles/handle.pxd +48 -0
  424. winloop-0.1.8/winloop/handles/handle.pyx +395 -0
  425. winloop-0.1.8/winloop/handles/idle.pxd +14 -0
  426. winloop-0.1.8/winloop/handles/idle.pyx +72 -0
  427. winloop-0.1.8/winloop/handles/pipe.pxd +33 -0
  428. winloop-0.1.8/winloop/handles/pipe.pyx +247 -0
  429. winloop-0.1.8/winloop/handles/poll.pxd +25 -0
  430. winloop-0.1.8/winloop/handles/poll.pyx +237 -0
  431. winloop-0.1.8/winloop/handles/process.pxd +80 -0
  432. winloop-0.1.8/winloop/handles/process.pyx +844 -0
  433. winloop-0.1.8/winloop/handles/stream.pxd +50 -0
  434. winloop-0.1.8/winloop/handles/stream.pyx +1038 -0
  435. winloop-0.1.8/winloop/handles/streamserver.pxd +26 -0
  436. winloop-0.1.8/winloop/handles/streamserver.pyx +150 -0
  437. winloop-0.1.8/winloop/handles/tcp.pxd +26 -0
  438. winloop-0.1.8/winloop/handles/tcp.pyx +228 -0
  439. winloop-0.1.8/winloop/handles/timer.pxd +18 -0
  440. winloop-0.1.8/winloop/handles/timer.pyx +89 -0
  441. winloop-0.1.8/winloop/handles/udp.pxd +22 -0
  442. winloop-0.1.8/winloop/handles/udp.pyx +408 -0
  443. winloop-0.1.8/winloop/includes/compat.h +178 -0
  444. winloop-0.1.8/winloop/includes/consts.pxi +33 -0
  445. winloop-0.1.8/winloop/includes/debug.h +3 -0
  446. winloop-0.1.8/winloop/includes/debug.pxd +3 -0
  447. winloop-0.1.8/winloop/includes/flowcontrol.pxd +23 -0
  448. winloop-0.1.8/winloop/includes/fork_handler.h +56 -0
  449. winloop-0.1.8/winloop/includes/python.pxd +31 -0
  450. winloop-0.1.8/winloop/includes/stdlib.pxi +179 -0
  451. winloop-0.1.8/winloop/includes/system.pxd +82 -0
  452. winloop-0.1.8/winloop/includes/uv.pxd +517 -0
  453. {winloop-0.1.1 → winloop-0.1.8}/winloop/loop.c +60991 -57074
  454. winloop-0.1.8/winloop/loop.pxd +230 -0
  455. {winloop-0.1.1 → winloop-0.1.8}/winloop/loop.pyi +4 -1
  456. winloop-0.1.8/winloop/loop.pyx +3441 -0
  457. winloop-0.1.8/winloop/lru.pyx +79 -0
  458. winloop-0.1.8/winloop/pseudosock.pyx +209 -0
  459. winloop-0.1.8/winloop/py.typed +0 -0
  460. winloop-0.1.8/winloop/request.pxd +8 -0
  461. winloop-0.1.8/winloop/request.pyx +65 -0
  462. winloop-0.1.8/winloop/server.pxd +19 -0
  463. winloop-0.1.8/winloop/server.pyx +136 -0
  464. winloop-0.1.8/winloop/sslproto.pxd +138 -0
  465. winloop-0.1.8/winloop/sslproto.pyx +950 -0
  466. {winloop-0.1.1 → winloop-0.1.8/winloop.egg-info}/PKG-INFO +87 -50
  467. winloop-0.1.8/winloop.egg-info/SOURCES.txt +474 -0
  468. winloop-0.1.8/winloop.egg-info/not-zip-safe +1 -0
  469. winloop-0.1.8/winloop.egg-info/requires.txt +17 -0
  470. winloop-0.1.8/winloop.png +0 -0
  471. winloop-0.1.1/pyproject.toml +0 -9
  472. winloop-0.1.1/setup.py +0 -96
  473. winloop-0.1.1/winloop/includes/context.h +0 -38
  474. winloop-0.1.1/winloop.egg-info/SOURCES.txt +0 -17
  475. winloop-0.1.1/winloop.egg-info/requires.txt +0 -1
  476. {winloop-0.1.1 → winloop-0.1.8}/LICENSE-APACHE +0 -0
  477. {winloop-0.1.1 → winloop-0.1.8}/LICENSE-MIT +0 -0
  478. {winloop-0.1.1 → winloop-0.1.8}/setup.cfg +0 -0
  479. {winloop-0.1.1 → winloop-0.1.8}/winloop/includes/__init__.py +0 -0
  480. {winloop-0.1.1 → winloop-0.1.8}/winloop.egg-info/dependency_links.txt +0 -0
  481. {winloop-0.1.1 → winloop-0.1.8}/winloop.egg-info/top_level.txt +0 -0
winloop-0.1.8/.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.8/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,48 +1,84 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: winloop
3
- Version: 0.1.1
4
- Summary: An alternative library for uvloop compatibility with Windows
3
+ Version: 0.1.8
4
+ Summary: Windows version of uvloop
5
5
  Author: Vizonex
6
- License: MIT
7
- Keywords: winloop,libuv,windows,cython,fast-asyncio,uvloop-alternative
8
- Platform: Microsoft Windows
6
+ License: MIT License
7
+ Project-URL: github, https://github.com/Vizonex/Winloop
8
+ Keywords: asyncio,networking
9
+ Classifier: Development Status :: 5 - Production/Stable
10
+ Classifier: Framework :: AsyncIO
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: Apache Software License
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Operating System :: POSIX
15
+ Classifier: Operating System :: MacOS :: MacOS X
16
+ Classifier: Operating System :: Microsoft :: Windows
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Programming Language :: Python :: 3.8
9
19
  Classifier: Programming Language :: Python :: 3.9
10
20
  Classifier: Programming Language :: Python :: 3.10
11
21
  Classifier: Programming Language :: Python :: 3.11
12
- Classifier: Intended Audience :: Developers
13
- Classifier: Framework :: AsyncIO
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Programming Language :: Python :: Implementation :: CPython
25
+ Classifier: Topic :: System :: Networking
26
+ Requires-Python: >=3.8.0
14
27
  Description-Content-Type: text/markdown
15
28
  License-File: LICENSE-APACHE
16
29
  License-File: LICENSE-MIT
17
- Requires-Dist: cython
30
+ Provides-Extra: test
31
+ Requires-Dist: aiohttp>=3.10.5; extra == "test"
32
+ Requires-Dist: flake8~=5.0; extra == "test"
33
+ Requires-Dist: psutil; extra == "test"
34
+ Requires-Dist: pycodestyle~=2.9.0; extra == "test"
35
+ Requires-Dist: pyOpenSSL~=23.0.0; extra == "test"
36
+ Requires-Dist: mypy>=0.800; extra == "test"
37
+ Provides-Extra: dev
38
+ Requires-Dist: setuptools>=60; extra == "dev"
39
+ Requires-Dist: Cython~=3.0; extra == "dev"
40
+ Provides-Extra: docs
41
+ Requires-Dist: Sphinx~=4.1.2; extra == "docs"
42
+ Requires-Dist: sphinxcontrib-asyncio~=0.3.0; extra == "docs"
43
+ Requires-Dist: sphinx_rtd_theme~=0.5.2; extra == "docs"
18
44
 
19
45
  <img src="https://raw.githubusercontent.com/Vizonex/Winloop/main/winloop.png" width="200px"/>
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>
20
47
 
21
48
  # Winloop
22
- An Alternative library for uvloop compatability with windows because let's face it. Window's python asyncio is garabage escpecially when Windows Defender eats up half your ram.
23
- I never really liked the fact that I couldn't make anything run faster escpecially 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 avalible on windows but doesn't have [compatability with uvloop at all.](https://github.com/MagicStack/uvloop/issues/14#issuecomment-575826367])
49
+ An Alternative library for uvloop compatibility with windows because let's face it. Window's python asyncio standard library is garbage especially when Windows Defender decides to eat half of 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])
24
51
 
25
- Because nobody was willing to step in after so many years of people waiting , I went ahead and downloaded the uvloop source code and modified the source code to be windows compatable by carefully removing and changing parts that were not made for windows, many hours of research went into making this library exist.
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.
26
53
 
27
- The differences with __uvloop__ is that forking has been fully disabled and some smaller api calls had to be changed. Subprocesses instead release the gil instead of forking out although I might change that in the future if handling asynchronous subprocesses becomes a problem to handle...
54
+ 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 instead release the gil instead of forking out...
28
55
 
56
+ There is a performance increase of about 5 times vs 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 it's brother uvloop.
29
57
 
30
- There is a perfromance increase of about 5 times vs using the `WindowsSelectorEventLoopPolicy` and `WindowsProactorEventLoopPolicy` which have been known to trigger ssl problems in python 3.9. Winloop is a very good replacement for those ssl problem as well.
31
58
 
32
59
 
33
- ## How to install Winloop on your Operating System
60
+ ## How to install Winloop on your Windows Operating System
34
61
 
35
62
  ```
36
63
  pip install winloop
37
64
  ```
38
65
 
39
- you can also clone the reposity and build the extension yourself by running the command below if you wish to use or build this library locally
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
67
+ to compile this library on your own.
40
68
 
41
69
  ```
42
- python setup.py build_ext --inplace
70
+ python setup.py build_ext --inplace
43
71
  ```
44
72
 
45
- If you find any sneaky bugs with this library be sure to open up an issue to our github repo. Me and other contributors will be happy to help you figure out and diagnose your problems.
73
+ ## Issues Reporting
74
+
75
+ If you find any bugs with this library be sure to open up an issue to our github repo. Me and other contributors will be happy try to help you figure out and diagnose your problems.
76
+
77
+ ## Making pull requests
78
+ We encourage anyone to make pull-requests to winloop from spelling mistakes to vulnerability patches. Every little bit helps keep this library maintained and alive.
79
+ 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.
80
+
81
+
46
82
 
47
83
  ```python
48
84
  try:
@@ -62,7 +98,7 @@ import sys
62
98
  class TestAioHTTP(unittest.TestCase):
63
99
  def __init__(self, methodName: str = "test_aiohttp_basic_1") -> None:
64
100
  super().__init__(methodName)
65
-
101
+
66
102
 
67
103
  def setUp(self):
68
104
  self.loop = asyncio.get_event_loop()
@@ -160,42 +196,43 @@ if __name__ == "__main__":
160
196
  # asyncio.DefaultEventLoopPolicy = asyncio.WindowsSelectorEventLoopPolicy
161
197
  # asyncio.DefaultEventLoopPolicy = asyncio.WindowsProactorEventLoopPolicy
162
198
  unittest.main()
163
- # Looks like winloop might be 3x faster than the Proctor Event Loop , THAT's A HUGE IMPROVEMENT!
199
+ # Looks like winloop might be 3x faster than the Proctor Event Loop , THAT's A HUGE IMPROVEMENT!
164
200
  print("testing again but with winloop enabled")
165
201
  winloop.install()
166
202
  unittest.main()
167
203
  ```
168
204
 
169
- The benchmarks for the code above are as follows
205
+ The benchmarks for the code above are as follows
170
206
 
171
207
  ## Benchmarks
172
208
 
173
- ### TCP Connections
209
+ ### TCP Connections
174
210
  -------------------
175
211
 
176
- | Asyncio Event Loop Policy | Time (in Seconds) |
212
+ | Asyncio Event Loop Policy | Time (in Seconds) |
177
213
  |-----------------------------------|-----------------------|
178
214
  | WinLoopPolicy | 0.493s |
179
215
  | WindowsProactorEventLoopPolicy | 2.510s |
180
216
  | WindowsSelectorEventLoopPolicy | 2.723s |
181
217
 
182
218
 
183
- That's a massive increase and jump from just TCP alone I'll be posting more benchmarks soon as
219
+ That's a massive increase and jump from just TCP alone I'll be posting more benchmarks soon as
184
220
  I modify more of the current test suites made by uvloop...
185
221
 
186
222
 
187
- ## How to Use Winloop with Fastapi
223
+ ## How to Use Winloop with Fastapi
188
224
 
189
225
  This was a cool little script I put together Just to make fastapi that much faster to handle
190
226
 
191
227
  ```python
192
228
 
229
+ # TODO this code example is deprecated
193
230
  from fastapi import FastAPI
194
231
  from fastapi.responses import HTMLResponse
195
- import winloop
232
+ import winloop
196
233
  import uvicorn
197
- import asyncio
198
- import datetime
234
+ import asyncio
235
+ import datetime
199
236
 
200
237
  app = FastAPI()
201
238
 
@@ -210,7 +247,7 @@ async def test_get_request():
210
247
  return HTMLResponse("<html><body><h1>FAST API WORKS WITH WINLOOP!</h1></body></html>")
211
248
 
212
249
 
213
- # starllete will use asyncio.to_thread() so that this can remain asynchronous
250
+ # starllete will use asyncio.to_thread() so that this can remain asynchronous
214
251
  @app.get("/date")
215
252
  def test_dynamic_response():
216
253
  return str(datetime.datetime.now())
@@ -227,14 +264,14 @@ if __name__ == "__main__":
227
264
  ```
228
265
 
229
266
 
230
- ## How To Use Winloop When Uvloop is not avalible
267
+ ## How To Use Winloop When Uvloop is not available
231
268
 
232
269
  ```python
233
270
 
234
- # Here's A small Example of using winloop when uvloop is not avalible to us
271
+ # Here's A small Example of using winloop when uvloop is not available to us
235
272
  import sys
236
273
  import aiohttp
237
- import asyncio
274
+ import asyncio
238
275
 
239
276
  async def main():
240
277
  async with aiohttp.ClientSession("https://httpbin.org") as client:
@@ -243,37 +280,37 @@ async def main():
243
280
 
244
281
  if __name__ == "__main__":
245
282
  if sys.platform in ('win32', 'cygwin', 'cli'):
246
- from winloop import install
283
+ from winloop import run
247
284
  else:
248
285
  # if we're on apple or linux do this instead
249
- from uvloop import install
250
- install()
251
- asyncio.run(main())
286
+ from uvloop import run
287
+ run(main())
252
288
  ```
253
-
254
-
255
- ## Possible Upcomming Features/Optimizations to Winloop / This is also our TODO list
256
- I have been looking deeply into some of the proposed Pulls and changes to `Uvloop` and I will be tuning in and listening to what's going on uvloop's end to see what we might have to change . This is a list of features I would like to implement from likely to least likely to be done as well as solved. If any of these feature have been added you will simply know by the fact that It won't be on this list anymore...
257
289
 
258
- - Drop All `DEF` Macros, I'm currently seeking help on replacements for macros where all the variables are known about at compile-time
259
290
 
260
- - Make a sucessful Github Workflow for uploading wheels to pypi any help and guidence would be appreciated
291
+ ## TODO-List
292
+
293
+ - Update Fastapi Example to a more recent version of fastapi
261
294
 
262
- - delete loop.c on install once the code has been compiled to a `.pyd` file since `loop.c` becomes 8 Microbytes (8MB) of waste at that point (yeah it's very big). Users don't need a file this big escpecailly for those who are diskspace sensetive like myself.
295
+ - Contact uvicorn about this [issue](https://github.com/Vizonex/Winloop/issues/11) I have a funny feeling something is going on here...
263
296
 
264
- - Adding in the nessesary 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...)
297
+ - Nightly Builds And Test Suite Workflows for anyone wanting to use newer unreleased versions.
265
298
 
266
- - Drop custom Socketpair function inside of `socketpair.h` in replacement for libvs's function until we can better understand how its need to be implemented so that we can make it go a bit deeper to be a bit more quick at creating sockets , the assert checks might be dropped as long as there's no problems with it. I'll be sure to reupload the dropped `socketpair.h` code of mine into a gist if anyone still wanted to go ahead and use it elsewhere although it may have many bugs of it's own which was my original reason for not using it when I discovered that libuv had it's own socketpair functions for windows...
299
+ - Drop All `DEF` Macros, I'm currently seeking help on replacements for macros where all the variables are known about at compile-time
267
300
 
268
- - Easier Error Diagnosis to code even though I've found that most errors are not arising from winloop's own code and it is being triggered from elsewhere (This is a good thing but makes it harder to tell where other devs mess up) in fact, winloop actually passes more tests than python's asyncio event loop policies do. This might just be both a blessing and a curse for us...
301
+ - 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...)
269
302
 
270
- - Maybe Drop and then re-join the gil after the subprocess is first spawned in instead of joining before being killed off by the end user (This will need to be accompanied by some heavy unittesting no doubt)
303
+ - write a workflow for compiling libuv on different versions of windows when distributing out pypi wheels.
271
304
 
272
- - Optimzing TCP Connections as well as sending data in `streams.pyx` with the uv bites are finally dropped in the try write portions of our library. Currently uv bites is just there as a protection measure by me, this will be dropped in the future since the try_write block has some subprocess checks as well as long as it doesn't have subprocess behaviors I'm alright with upgrading `streams.pyx` as long as it doesn't break. I did leave my plan uncommented for right now but the other half belonging to subprocesses looks rather steep/deep.
305
+ - write a workflow for nightly builds if necessary for verification of pull requests.
273
306
 
274
- - drop the `.lib` file for compiling libuv in replacement for libuv's C files directly once the current compiling problems and errors have been solved.
307
+ - Sphinx Styled Documentation (Maybe I'm thinking about it...)
275
308
 
309
+ - Update benchmarks (They are old) can't believe I maintained this project for over a year now...
276
310
 
277
311
  ## Videos
278
312
  - By me: https://www.youtube.com/watch?v=tz9RYJ6aBZ8 (I might make a tutorial on how to use and install winloop it for those who have reading problems)
279
- - My Presentation and Virtual Confrence: https://www.youtube.com/watch?v=Cbb6trkKWXY
313
+ - My Presentation and Virtual Confrence: https://www.youtube.com/watch?v=Cbb6trkKWXY
314
+
315
+ ## Contributing
316
+ I put my heart and soul into this library ever since it began and any help is apperciated and means a lot to me.
@@ -1,30 +1,40 @@
1
1
  <img src="https://raw.githubusercontent.com/Vizonex/Winloop/main/winloop.png" width="200px"/>
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>
2
3
 
3
4
  # Winloop
4
- An Alternative library for uvloop compatability with windows because let's face it. Window's python asyncio is garabage escpecially when Windows Defender eats up half your ram.
5
- I never really liked the fact that I couldn't make anything run faster escpecially 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 avalible on windows but doesn't have [compatability with uvloop at all.](https://github.com/MagicStack/uvloop/issues/14#issuecomment-575826367])
5
+ An Alternative library for uvloop compatibility with windows because let's face it. Window's python asyncio standard library is garbage especially when Windows Defender decides to eat half of 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])
6
7
 
7
- Because nobody was willing to step in after so many years of people waiting , I went ahead and downloaded the uvloop source code and modified the source code to be windows compatable by carefully removing and changing parts that were not made for windows, many hours of research went into making this library exist.
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.
8
9
 
9
- The differences with __uvloop__ is that forking has been fully disabled and some smaller api calls had to be changed. Subprocesses instead release the gil instead of forking out although I might change that in the future if handling asynchronous subprocesses becomes a problem to handle...
10
+ 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 instead release the gil instead of forking out...
10
11
 
12
+ There is a performance increase of about 5 times vs 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 it's brother uvloop.
11
13
 
12
- There is a perfromance increase of about 5 times vs using the `WindowsSelectorEventLoopPolicy` and `WindowsProactorEventLoopPolicy` which have been known to trigger ssl problems in python 3.9. Winloop is a very good replacement for those ssl problem as well.
13
14
 
14
15
 
15
- ## How to install Winloop on your Operating System
16
+ ## How to install Winloop on your Windows Operating System
16
17
 
17
18
  ```
18
19
  pip install winloop
19
20
  ```
20
21
 
21
- you can also clone the reposity and build the extension yourself by running the command below if you wish to use or build this library locally
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
+ to compile this library on your own.
22
24
 
23
25
  ```
24
- python setup.py build_ext --inplace
26
+ python setup.py build_ext --inplace
25
27
  ```
26
28
 
27
- If you find any sneaky bugs with this library be sure to open up an issue to our github repo. Me and other contributors will be happy to help you figure out and diagnose your problems.
29
+ ## Issues Reporting
30
+
31
+ If you find any bugs with this library be sure to open up an issue to our github repo. Me and other contributors will be happy try to help you figure out and diagnose your problems.
32
+
33
+ ## Making pull requests
34
+ We encourage anyone to make pull-requests to winloop from spelling mistakes to vulnerability patches. Every little bit helps keep this library maintained and alive.
35
+ 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.
36
+
37
+
28
38
 
29
39
  ```python
30
40
  try:
@@ -44,7 +54,7 @@ import sys
44
54
  class TestAioHTTP(unittest.TestCase):
45
55
  def __init__(self, methodName: str = "test_aiohttp_basic_1") -> None:
46
56
  super().__init__(methodName)
47
-
57
+
48
58
 
49
59
  def setUp(self):
50
60
  self.loop = asyncio.get_event_loop()
@@ -142,42 +152,43 @@ if __name__ == "__main__":
142
152
  # asyncio.DefaultEventLoopPolicy = asyncio.WindowsSelectorEventLoopPolicy
143
153
  # asyncio.DefaultEventLoopPolicy = asyncio.WindowsProactorEventLoopPolicy
144
154
  unittest.main()
145
- # Looks like winloop might be 3x faster than the Proctor Event Loop , THAT's A HUGE IMPROVEMENT!
155
+ # Looks like winloop might be 3x faster than the Proctor Event Loop , THAT's A HUGE IMPROVEMENT!
146
156
  print("testing again but with winloop enabled")
147
157
  winloop.install()
148
158
  unittest.main()
149
159
  ```
150
160
 
151
- The benchmarks for the code above are as follows
161
+ The benchmarks for the code above are as follows
152
162
 
153
163
  ## Benchmarks
154
164
 
155
- ### TCP Connections
165
+ ### TCP Connections
156
166
  -------------------
157
167
 
158
- | Asyncio Event Loop Policy | Time (in Seconds) |
168
+ | Asyncio Event Loop Policy | Time (in Seconds) |
159
169
  |-----------------------------------|-----------------------|
160
170
  | WinLoopPolicy | 0.493s |
161
171
  | WindowsProactorEventLoopPolicy | 2.510s |
162
172
  | WindowsSelectorEventLoopPolicy | 2.723s |
163
173
 
164
174
 
165
- That's a massive increase and jump from just TCP alone I'll be posting more benchmarks soon as
175
+ That's a massive increase and jump from just TCP alone I'll be posting more benchmarks soon as
166
176
  I modify more of the current test suites made by uvloop...
167
177
 
168
178
 
169
- ## How to Use Winloop with Fastapi
179
+ ## How to Use Winloop with Fastapi
170
180
 
171
181
  This was a cool little script I put together Just to make fastapi that much faster to handle
172
182
 
173
183
  ```python
174
184
 
185
+ # TODO this code example is deprecated
175
186
  from fastapi import FastAPI
176
187
  from fastapi.responses import HTMLResponse
177
- import winloop
188
+ import winloop
178
189
  import uvicorn
179
- import asyncio
180
- import datetime
190
+ import asyncio
191
+ import datetime
181
192
 
182
193
  app = FastAPI()
183
194
 
@@ -192,7 +203,7 @@ async def test_get_request():
192
203
  return HTMLResponse("<html><body><h1>FAST API WORKS WITH WINLOOP!</h1></body></html>")
193
204
 
194
205
 
195
- # starllete will use asyncio.to_thread() so that this can remain asynchronous
206
+ # starllete will use asyncio.to_thread() so that this can remain asynchronous
196
207
  @app.get("/date")
197
208
  def test_dynamic_response():
198
209
  return str(datetime.datetime.now())
@@ -209,14 +220,14 @@ if __name__ == "__main__":
209
220
  ```
210
221
 
211
222
 
212
- ## How To Use Winloop When Uvloop is not avalible
223
+ ## How To Use Winloop When Uvloop is not available
213
224
 
214
225
  ```python
215
226
 
216
- # Here's A small Example of using winloop when uvloop is not avalible to us
227
+ # Here's A small Example of using winloop when uvloop is not available to us
217
228
  import sys
218
229
  import aiohttp
219
- import asyncio
230
+ import asyncio
220
231
 
221
232
  async def main():
222
233
  async with aiohttp.ClientSession("https://httpbin.org") as client:
@@ -225,37 +236,37 @@ async def main():
225
236
 
226
237
  if __name__ == "__main__":
227
238
  if sys.platform in ('win32', 'cygwin', 'cli'):
228
- from winloop import install
239
+ from winloop import run
229
240
  else:
230
241
  # if we're on apple or linux do this instead
231
- from uvloop import install
232
- install()
233
- asyncio.run(main())
242
+ from uvloop import run
243
+ run(main())
234
244
  ```
235
-
236
-
237
- ## Possible Upcomming Features/Optimizations to Winloop / This is also our TODO list
238
- I have been looking deeply into some of the proposed Pulls and changes to `Uvloop` and I will be tuning in and listening to what's going on uvloop's end to see what we might have to change . This is a list of features I would like to implement from likely to least likely to be done as well as solved. If any of these feature have been added you will simply know by the fact that It won't be on this list anymore...
239
245
 
240
- - Drop All `DEF` Macros, I'm currently seeking help on replacements for macros where all the variables are known about at compile-time
241
246
 
242
- - Make a sucessful Github Workflow for uploading wheels to pypi any help and guidence would be appreciated
247
+ ## TODO-List
243
248
 
244
- - delete loop.c on install once the code has been compiled to a `.pyd` file since `loop.c` becomes 8 Microbytes (8MB) of waste at that point (yeah it's very big). Users don't need a file this big escpecailly for those who are diskspace sensetive like myself.
249
+ - Update Fastapi Example to a more recent version of fastapi
245
250
 
246
- - Adding in the nessesary 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...)
251
+ - Contact uvicorn about this [issue](https://github.com/Vizonex/Winloop/issues/11) I have a funny feeling something is going on here...
247
252
 
248
- - Drop custom Socketpair function inside of `socketpair.h` in replacement for libvs's function until we can better understand how its need to be implemented so that we can make it go a bit deeper to be a bit more quick at creating sockets , the assert checks might be dropped as long as there's no problems with it. I'll be sure to reupload the dropped `socketpair.h` code of mine into a gist if anyone still wanted to go ahead and use it elsewhere although it may have many bugs of it's own which was my original reason for not using it when I discovered that libuv had it's own socketpair functions for windows...
253
+ - Nightly Builds And Test Suite Workflows for anyone wanting to use newer unreleased versions.
249
254
 
250
- - Easier Error Diagnosis to code even though I've found that most errors are not arising from winloop's own code and it is being triggered from elsewhere (This is a good thing but makes it harder to tell where other devs mess up) in fact, winloop actually passes more tests than python's asyncio event loop policies do. This might just be both a blessing and a curse for us...
255
+ - Drop All `DEF` Macros, I'm currently seeking help on replacements for macros where all the variables are known about at compile-time
256
+
257
+ - 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...)
251
258
 
252
- - Maybe Drop and then re-join the gil after the subprocess is first spawned in instead of joining before being killed off by the end user (This will need to be accompanied by some heavy unittesting no doubt)
259
+ - write a workflow for compiling libuv on different versions of windows when distributing out pypi wheels.
253
260
 
254
- - Optimzing TCP Connections as well as sending data in `streams.pyx` with the uv bites are finally dropped in the try write portions of our library. Currently uv bites is just there as a protection measure by me, this will be dropped in the future since the try_write block has some subprocess checks as well as long as it doesn't have subprocess behaviors I'm alright with upgrading `streams.pyx` as long as it doesn't break. I did leave my plan uncommented for right now but the other half belonging to subprocesses looks rather steep/deep.
261
+ - write a workflow for nightly builds if necessary for verification of pull requests.
255
262
 
256
- - drop the `.lib` file for compiling libuv in replacement for libuv's C files directly once the current compiling problems and errors have been solved.
263
+ - Sphinx Styled Documentation (Maybe I'm thinking about it...)
257
264
 
265
+ - Update benchmarks (They are old) can't believe I maintained this project for over a year now...
258
266
 
259
267
  ## Videos
260
268
  - By me: https://www.youtube.com/watch?v=tz9RYJ6aBZ8 (I might make a tutorial on how to use and install winloop it for those who have reading problems)
261
- - My Presentation and Virtual Confrence: https://www.youtube.com/watch?v=Cbb6trkKWXY
269
+ - My Presentation and Virtual Confrence: https://www.youtube.com/watch?v=Cbb6trkKWXY
270
+
271
+ ## Contributing
272
+ I put my heart and soul into this library ever since it began and any help is apperciated and means a lot to me.
@@ -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
93
+ # ThreadPoolExecutor 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')