winloop 0.1.2__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 (482) 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.2/winloop.egg-info → winloop-0.1.8}/PKG-INFO +80 -42
  5. {winloop-0.1.2 → winloop-0.1.8}/README.md +45 -33
  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.2 → winloop-0.1.8}/tests/__main__.py +1 -1
  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.2 → winloop-0.1.8}/tests/test_aiohttp.py +7 -1
  18. {winloop-0.1.2 → winloop-0.1.8}/tests/test_aiomultiprocess.py +17 -17
  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.2 → winloop-0.1.8}/winloop/__init__.py +50 -69
  408. {winloop-0.1.2 → winloop-0.1.8}/winloop/_noop.py +0 -1
  409. {winloop-0.1.2 → winloop-0.1.8}/winloop/_testbase.py +102 -92
  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.2 → winloop-0.1.8}/winloop/loop.c +64140 -60355
  454. winloop-0.1.8/winloop/loop.pxd +230 -0
  455. {winloop-0.1.2 → winloop-0.1.8}/winloop/loop.pyi +15 -27
  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.2 → winloop-0.1.8/winloop.egg-info}/PKG-INFO +80 -42
  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.2 → winloop-0.1.8}/winloop.egg-info/top_level.txt +0 -1
  471. winloop-0.1.8/winloop.png +0 -0
  472. winloop-0.1.2/pyproject.toml +0 -9
  473. winloop-0.1.2/setup.py +0 -96
  474. winloop-0.1.2/tests/__init__.py +0 -1
  475. winloop-0.1.2/winloop/includes/context.h +0 -38
  476. winloop-0.1.2/winloop.egg-info/SOURCES.txt +0 -21
  477. winloop-0.1.2/winloop.egg-info/requires.txt +0 -1
  478. {winloop-0.1.2 → winloop-0.1.8}/LICENSE-APACHE +0 -0
  479. {winloop-0.1.2 → winloop-0.1.8}/LICENSE-MIT +0 -0
  480. {winloop-0.1.2 → winloop-0.1.8}/setup.cfg +0 -0
  481. {winloop-0.1.2 → winloop-0.1.8}/winloop/includes/__init__.py +0 -0
  482. {winloop-0.1.2 → winloop-0.1.8}/winloop.egg-info/dependency_links.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,32 +1,60 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: winloop
3
- Version: 0.1.2
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 standard libaray is garabage escpecially when Windows Defender decides to eat 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 for windows [but windows was never compatable with uvloop.](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 waiting, I went ahead and downloaded the source code for uvloop and started modifying 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
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
 
29
- 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 solving those ssl problem as well. This library also has comparable performace to it's brother uvloop.
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.
57
+
30
58
 
31
59
 
32
60
  ## How to install Winloop on your Windows Operating System
@@ -35,17 +63,21 @@ There is a perfromance increase of about 5 times vs using the `WindowsSelectorEv
35
63
  pip install winloop
36
64
  ```
37
65
 
38
- 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, Note that you will need Cython and The Visual C++ extensions
39
- to compile this library on your own.
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
73
  ## Issues Reporting
46
74
 
47
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.
48
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
+
49
81
 
50
82
 
51
83
  ```python
@@ -66,7 +98,7 @@ import sys
66
98
  class TestAioHTTP(unittest.TestCase):
67
99
  def __init__(self, methodName: str = "test_aiohttp_basic_1") -> None:
68
100
  super().__init__(methodName)
69
-
101
+
70
102
 
71
103
  def setUp(self):
72
104
  self.loop = asyncio.get_event_loop()
@@ -164,42 +196,43 @@ if __name__ == "__main__":
164
196
  # asyncio.DefaultEventLoopPolicy = asyncio.WindowsSelectorEventLoopPolicy
165
197
  # asyncio.DefaultEventLoopPolicy = asyncio.WindowsProactorEventLoopPolicy
166
198
  unittest.main()
167
- # 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!
168
200
  print("testing again but with winloop enabled")
169
201
  winloop.install()
170
202
  unittest.main()
171
203
  ```
172
204
 
173
- The benchmarks for the code above are as follows
205
+ The benchmarks for the code above are as follows
174
206
 
175
207
  ## Benchmarks
176
208
 
177
- ### TCP Connections
209
+ ### TCP Connections
178
210
  -------------------
179
211
 
180
- | Asyncio Event Loop Policy | Time (in Seconds) |
212
+ | Asyncio Event Loop Policy | Time (in Seconds) |
181
213
  |-----------------------------------|-----------------------|
182
214
  | WinLoopPolicy | 0.493s |
183
215
  | WindowsProactorEventLoopPolicy | 2.510s |
184
216
  | WindowsSelectorEventLoopPolicy | 2.723s |
185
217
 
186
218
 
187
- 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
188
220
  I modify more of the current test suites made by uvloop...
189
221
 
190
222
 
191
- ## How to Use Winloop with Fastapi
223
+ ## How to Use Winloop with Fastapi
192
224
 
193
225
  This was a cool little script I put together Just to make fastapi that much faster to handle
194
226
 
195
227
  ```python
196
228
 
229
+ # TODO this code example is deprecated
197
230
  from fastapi import FastAPI
198
231
  from fastapi.responses import HTMLResponse
199
- import winloop
232
+ import winloop
200
233
  import uvicorn
201
- import asyncio
202
- import datetime
234
+ import asyncio
235
+ import datetime
203
236
 
204
237
  app = FastAPI()
205
238
 
@@ -214,7 +247,7 @@ async def test_get_request():
214
247
  return HTMLResponse("<html><body><h1>FAST API WORKS WITH WINLOOP!</h1></body></html>")
215
248
 
216
249
 
217
- # 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
218
251
  @app.get("/date")
219
252
  def test_dynamic_response():
220
253
  return str(datetime.datetime.now())
@@ -231,14 +264,14 @@ if __name__ == "__main__":
231
264
  ```
232
265
 
233
266
 
234
- ## How To Use Winloop When Uvloop is not avalible
267
+ ## How To Use Winloop When Uvloop is not available
235
268
 
236
269
  ```python
237
270
 
238
- # 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
239
272
  import sys
240
273
  import aiohttp
241
- import asyncio
274
+ import asyncio
242
275
 
243
276
  async def main():
244
277
  async with aiohttp.ClientSession("https://httpbin.org") as client:
@@ -250,29 +283,34 @@ if __name__ == "__main__":
250
283
  from winloop import run
251
284
  else:
252
285
  # if we're on apple or linux do this instead
253
- from uvloop import run
286
+ from uvloop import run
254
287
  run(main())
255
288
  ```
256
-
257
-
258
- ## Possible Upcomming Features/Optimizations to Winloop / This is also our TODO list
259
- 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...
260
289
 
261
- - Nightly Builds And Test Suite Workflows for anyone wanting to use newer unreleased versions.
262
290
 
263
- - Format all `.py` & `.pyi` files using [black](https://pypi.org/project/black/)
291
+ ## TODO-List
292
+
293
+ - Update Fastapi Example to a more recent version of fastapi
264
294
 
265
- - Finish implementing our brand new test suite and write a workflow for using it whenever a pullrequest is being made
295
+ - Contact uvicorn about this [issue](https://github.com/Vizonex/Winloop/issues/11) I have a funny feeling something is going on here...
296
+
297
+ - Nightly Builds And Test Suite Workflows for anyone wanting to use newer unreleased versions.
266
298
 
267
299
  - Drop All `DEF` Macros, I'm currently seeking help on replacements for macros where all the variables are known about at compile-time
268
300
 
269
- - 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...)
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...)
270
302
 
271
- - 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.
303
+ - write a workflow for compiling libuv on different versions of windows when distributing out pypi wheels.
272
304
 
273
- - Sphinx Styled Documentation (Maybe I am thinking about it...)
305
+ - write a workflow for nightly builds if necessary for verification of pull requests.
274
306
 
307
+ - Sphinx Styled Documentation (Maybe I'm thinking about it...)
308
+
309
+ - Update benchmarks (They are old) can't believe I maintained this project for over a year now...
275
310
 
276
311
  ## Videos
277
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)
278
- - 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,14 +1,16 @@
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 standard libaray is garabage escpecially when Windows Defender decides to eat 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 for windows [but windows was never compatable with uvloop.](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 waiting, I went ahead and downloaded the source code for uvloop and started modifying 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
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
 
11
- 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 solving those ssl problem as well. This library also has comparable performace to it's brother uvloop.
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.
13
+
12
14
 
13
15
 
14
16
  ## How to install Winloop on your Windows Operating System
@@ -17,17 +19,21 @@ There is a perfromance increase of about 5 times vs using the `WindowsSelectorEv
17
19
  pip install winloop
18
20
  ```
19
21
 
20
- 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, Note that you will need Cython and The Visual C++ extensions
21
- to compile this library on your own.
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
29
  ## Issues Reporting
28
30
 
29
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.
30
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
+
31
37
 
32
38
 
33
39
  ```python
@@ -48,7 +54,7 @@ import sys
48
54
  class TestAioHTTP(unittest.TestCase):
49
55
  def __init__(self, methodName: str = "test_aiohttp_basic_1") -> None:
50
56
  super().__init__(methodName)
51
-
57
+
52
58
 
53
59
  def setUp(self):
54
60
  self.loop = asyncio.get_event_loop()
@@ -146,42 +152,43 @@ if __name__ == "__main__":
146
152
  # asyncio.DefaultEventLoopPolicy = asyncio.WindowsSelectorEventLoopPolicy
147
153
  # asyncio.DefaultEventLoopPolicy = asyncio.WindowsProactorEventLoopPolicy
148
154
  unittest.main()
149
- # 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!
150
156
  print("testing again but with winloop enabled")
151
157
  winloop.install()
152
158
  unittest.main()
153
159
  ```
154
160
 
155
- The benchmarks for the code above are as follows
161
+ The benchmarks for the code above are as follows
156
162
 
157
163
  ## Benchmarks
158
164
 
159
- ### TCP Connections
165
+ ### TCP Connections
160
166
  -------------------
161
167
 
162
- | Asyncio Event Loop Policy | Time (in Seconds) |
168
+ | Asyncio Event Loop Policy | Time (in Seconds) |
163
169
  |-----------------------------------|-----------------------|
164
170
  | WinLoopPolicy | 0.493s |
165
171
  | WindowsProactorEventLoopPolicy | 2.510s |
166
172
  | WindowsSelectorEventLoopPolicy | 2.723s |
167
173
 
168
174
 
169
- 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
170
176
  I modify more of the current test suites made by uvloop...
171
177
 
172
178
 
173
- ## How to Use Winloop with Fastapi
179
+ ## How to Use Winloop with Fastapi
174
180
 
175
181
  This was a cool little script I put together Just to make fastapi that much faster to handle
176
182
 
177
183
  ```python
178
184
 
185
+ # TODO this code example is deprecated
179
186
  from fastapi import FastAPI
180
187
  from fastapi.responses import HTMLResponse
181
- import winloop
188
+ import winloop
182
189
  import uvicorn
183
- import asyncio
184
- import datetime
190
+ import asyncio
191
+ import datetime
185
192
 
186
193
  app = FastAPI()
187
194
 
@@ -196,7 +203,7 @@ async def test_get_request():
196
203
  return HTMLResponse("<html><body><h1>FAST API WORKS WITH WINLOOP!</h1></body></html>")
197
204
 
198
205
 
199
- # 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
200
207
  @app.get("/date")
201
208
  def test_dynamic_response():
202
209
  return str(datetime.datetime.now())
@@ -213,14 +220,14 @@ if __name__ == "__main__":
213
220
  ```
214
221
 
215
222
 
216
- ## How To Use Winloop When Uvloop is not avalible
223
+ ## How To Use Winloop When Uvloop is not available
217
224
 
218
225
  ```python
219
226
 
220
- # 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
221
228
  import sys
222
229
  import aiohttp
223
- import asyncio
230
+ import asyncio
224
231
 
225
232
  async def main():
226
233
  async with aiohttp.ClientSession("https://httpbin.org") as client:
@@ -232,29 +239,34 @@ if __name__ == "__main__":
232
239
  from winloop import run
233
240
  else:
234
241
  # if we're on apple or linux do this instead
235
- from uvloop import run
242
+ from uvloop import run
236
243
  run(main())
237
244
  ```
238
-
239
-
240
- ## Possible Upcomming Features/Optimizations to Winloop / This is also our TODO list
241
- 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...
242
245
 
243
- - Nightly Builds And Test Suite Workflows for anyone wanting to use newer unreleased versions.
244
246
 
245
- - Format all `.py` & `.pyi` files using [black](https://pypi.org/project/black/)
247
+ ## TODO-List
248
+
249
+ - Update Fastapi Example to a more recent version of fastapi
250
+
251
+ - Contact uvicorn about this [issue](https://github.com/Vizonex/Winloop/issues/11) I have a funny feeling something is going on here...
246
252
 
247
- - Finish implementing our brand new test suite and write a workflow for using it whenever a pullrequest is being made
253
+ - Nightly Builds And Test Suite Workflows for anyone wanting to use newer unreleased versions.
248
254
 
249
255
  - Drop All `DEF` Macros, I'm currently seeking help on replacements for macros where all the variables are known about at compile-time
250
256
 
251
- - 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...)
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...)
258
+
259
+ - write a workflow for compiling libuv on different versions of windows when distributing out pypi wheels.
252
260
 
253
- - 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.
261
+ - write a workflow for nightly builds if necessary for verification of pull requests.
254
262
 
255
- - Sphinx Styled Documentation (Maybe I am thinking about it...)
263
+ - Sphinx Styled Documentation (Maybe I'm thinking about it...)
256
264
 
265
+ - Update benchmarks (They are old) can't believe I maintained this project for over a year now...
257
266
 
258
267
  ## Videos
259
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)
260
- - 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')