Paul Sokolovsky
16afc06b8c
uasyncio: Switch to memory-efficient poll.ipoll() method.
...
As added in MicroPython 1.9.
2017-06-06 21:04:37 +03:00
Paul Sokolovsky
e8e531b754
uasyncio: Release 1.1.2.
2017-05-05 11:35:24 +03:00
Paul Sokolovsky
9a72e29564
uasyncio: Consistently use "if DEBUG and __debug__:" stanza.
...
To make sure this module can work without logging module imported, just
like uasyncio.core was made to.
2017-05-05 11:33:39 +03:00
Paul Sokolovsky
53193ba2e7
uasyncio: benchmark: Modern browsers produce requests more than 256 bytes.
...
So, not all of the request was read, and a browser would report than
connection was reset.
2017-03-16 01:55:32 +03:00
Paul Sokolovsky
a355801fb1
uasyncio: wait: Remove no longer needed "if", artifact of epoll impl.
2017-03-13 00:44:58 +03:00
Paul Sokolovsky
4fc72c6032
uasyncio: Remove "epoll" references from previous Linux-only implementation.
2017-03-12 16:42:02 +03:00
Paul Sokolovsky
aba6935892
uasyncio: Release 1.1.1.
2017-02-16 00:04:39 +03:00
Paul Sokolovsky
67445f3334
uasyncio: benchmark: Rename test runners to correspond to underlying tests.
2017-02-15 11:19:10 +03:00
Paul Sokolovsky
6a4973331a
uasyncio: benchmark: Set higher queue length for "medium" test.
...
Following setting the default conservatively low in the module.
Surprisingly, heavy test appears to work with new default length
of 42.
2017-02-15 11:17:02 +03:00
Paul Sokolovsky
e3dac1d693
uasyncio: Allow to override queue length, while setting low default.
...
The default queue length is set to take under 0.5K RAM on 32-bit system.
A queue length can be passed to get_event_loop() to override it. This
change follows similar change in uasyncio.core.
2017-02-15 11:14:53 +03:00
Paul Sokolovsky
f6668aae28
uasyncio: Release 1.1.
2017-01-28 01:58:05 +03:00
Paul Sokolovsky
1bf1c74ae5
uasyncio: Use builtin uerrno module.
2017-01-28 01:55:40 +03:00
Paul Sokolovsky
7043ee0702
uasyncio: Implement StreamReader.readexactly().
...
With a unit test.
2017-01-28 01:04:21 +03:00
Paul Sokolovsky
ec7b4b948b
uasyncio: StreamReader.readline: Handle partial reads.
...
Now it will return a complete line regardless if it may take several
partial reads to do that. Test included.
2017-01-27 01:09:19 +03:00
Paul Sokolovsky
a8d85e28d0
uasyncio: Fix partial reads in StreamReader.read/readline() methods.
...
If None (no data, would block) is received, need to wait for more data,
not just read it again immediately.
2017-01-26 22:20:29 +03:00
Paul Sokolovsky
56dd0f94e9
uasyncio: Rename examples as such.
2017-01-04 18:01:05 +03:00
Paul Sokolovsky
3e37bdda56
uasyncio: Move test_call_soon.py to uasyncio.core, as it needs only it.
...
Also, rename as example.
2017-01-04 18:01:05 +03:00
Daniel Mizyrycki
4bc5ab902b
uasyncio: Add echo test
2017-01-01 19:06:54 -08:00
Daniel Mizyrycki
0f5d5cead7
uasyncio: Add minimum esp8266 support
2017-01-01 18:17:17 -08:00
Paul Sokolovsky
6256ad69c0
uasyncio: Release 1.0.1.
2016-12-30 22:32:26 +03:00
Paul Sokolovsky
5403e0f710
uasyncio: Use DEBUG variable as imported from uasyncio.core.
...
Avoids heap allocation to render disabled debug logging strings.
2016-12-29 11:37:41 +03:00
Paul Sokolovsky
f29be360c0
uasyncio: wait: Add workaround against heap alloc on empty iteration.
...
"for a in ():" unconditionally allocates heap so far, per
https://github.com/micropython/micropython/issues/2716 . So, test for
empty result before iterating over it.
2016-12-28 10:25:31 +03:00
Paul Sokolovsky
23ff6305c3
uasyncio: Release 1.0.
2016-11-13 15:18:30 +03:00
Paul Sokolovsky
67d8e55dea
uasyncio: Update for switching to utime.ticks_ms() timesource.
2016-11-13 04:39:52 +03:00
Paul Sokolovsky
dfe4dee62a
all: setup.py: New releases for gzip 4k conversion.
2016-10-11 06:47:01 +03:00
Paul Sokolovsky
65fb3707ba
all: metadata.txt: Bump version for gzip 4k conversion.
2016-10-11 06:46:12 +03:00
Paul Sokolovsky
6f7bed1c53
uasyncio: test_http_server_heavy.py: Comment out mem_info() call.
2016-01-11 00:07:43 +02:00
Paul Sokolovsky
86692631c1
uasyncio: Add missing Boom HTTP testing tool support script.
2016-01-10 23:39:40 +02:00
Paul Sokolovsky
e9648dad01
uasyncio: Release 0.9.
2015-12-13 01:55:06 +02:00
Paul Sokolovsky
5e10ef8adf
uasyncio: Switch to builtin uselect.poll() object.
...
This is a big step towards supporting uasyncio on baremetal builds (and
on unix builds without FFI support).
2015-12-13 01:46:05 +02:00
Paul Sokolovsky
b4b19f1dce
uasyncio: Schedule simple I/O completion callbacks directly in event loop.
...
Simple == without args. This is expected action for them, and saves creation
of lambda just for that. Actually, probably all callbacks should be handled
this way.
2015-12-11 22:53:29 +02:00
Paul Sokolovsky
7cd53c8bf8
uasyncio: IORead/IOWrite syscalls don't return anything.
...
Their semantics is "wait for I/O of given type on object passed as argument",
so return value would be the same as argument, and thus no need to bother
to store/pass it around.
2015-12-10 00:29:10 +02:00
Paul Sokolovsky
17d96d35b5
uasyncio: Optimize reader/writer callbacks with no arguments.
...
Avoids allocating tuples.
2015-12-07 01:13:00 +02:00
Paul Sokolovsky
7fe611172f
uasyncio/benchmark: Default is "medium" test, add CPython support.
2015-06-21 02:03:42 +03:00
Paul Sokolovsky
1251e83b6c
uasyncio/benchmark: Add "medium load" server, serving 12K output per request.
2015-06-21 02:03:37 +03:00
Paul Sokolovsky
68b30061bc
uasyncio/benchmark: CPython asyncio compatibility.
...
Unlimited .read() doesn't play well with it.
2015-06-21 02:00:42 +03:00
Paul Sokolovsky
0ce0123ab5
uasyncio/benchmark: Update for latest uasyncio/micropython.
2015-06-21 01:59:34 +03:00
Damien George
72d1f5ecfa
uasyncio: Add StreamWriter.get_extra_info() to get peername.
...
This is the standard way of getting the name of the client that is
connected.
2015-06-03 13:25:27 +00:00
Paul Sokolovsky
1cbd5591f9
uasyncio: Release 0.8.1.
2015-01-04 22:01:36 +02:00
Paul Sokolovsky
99fa203686
uasyncio: StreamReader.close() -> .aclose().
...
Note: CPython asyncio lacks .close() on StreamReader at all, only StreamWriter
has it.
2015-01-04 21:47:06 +02:00
Paul Sokolovsky
20ddd54cb9
uasyncio: close() is synchronous method, ours is aclose() then.
2015-01-02 01:51:44 +02:00
Paul Sokolovsky
171717dc8a
uasyncio: Add automated script for validation testing with Boom.
2014-11-27 22:15:36 +02:00
Paul Sokolovsky
c1159a477e
uasyncio: Add automated script for performance testing with Apache Bench.
2014-11-12 23:43:28 +02:00
Paul Sokolovsky
5601371cf0
uasyncio: Add instructions for testing/benchmarking.
2014-11-11 23:17:35 +02:00
Paul Sokolovsky
4fc39d86af
uasyncio: start_server(): Add listen backlog arg, default to 10.
2014-11-06 17:14:50 +02:00
Paul Sokolovsky
79c3d93fa1
uasyncio: Release 0.7.1.
2014-11-04 02:55:40 +02:00
Paul Sokolovsky
e9c7fa43f4
uasyncio: Set EpollEventLoop in a new way after .core refactor.
2014-11-04 02:52:31 +02:00
Paul Sokolovsky
0a529adfdc
uasyncio: Use EPOLLONESHOT flag for add_reader/writer().
...
When we issue IORead/IOWrite syscall, we want get back notification just for
that call. But if we add fd to epoll, it will trigger continuously when the
condition is met. For example, a socket with empty write buffer will always
signal EPOLLOUT, regardless if we want to write to it now or not. This will
lead to situation when our coro will be woken up on such socket on *any*
syscall, and this syscall will get completely different socket as result (
or if syscall doesn't return socket - completely different result value).
So, to get semantics right, we need to make sure that for each IORead/IOWrite,
we get notified only once, and further events on socket are ignored until
we ask for them again. This is exactly what EPOLLONESHOT flag does.
The other alternative is to remove fd from epoll after each IORead/IOWrite,
but apparently EPOLLONESHOT is more performant way.
Yet another alternarnative would be to use edge-triggered mode of epoll,
but it has own peculiarities, like, after each event, client must make sure
that it is handled completely and reset, otherwise it may not trigger again,
even if there's unprocessed data. For example, if EPOLLIN|EPOLLET is used,
client must make sure that it reads all data available, until read() returns
EAGAIN. If it reads say just 10 bytes, then next time event simply won't
trigger (because it's edge event, which triggers on change like "no data" -
"data"; if we didn't read all data, the situation is "data" - "data", there's
no change in condition, and event is not triggered). Surely, that's not what
we want (at least not without restructuring how StreamReader works).
So, EPOLLONESHOT is the most obvious, and easiest to reason way to get needed
semantics.
2014-11-03 00:41:00 +02:00
Paul Sokolovsky
2a26ee80b7
uasyncio: Add checks that IOWrite() syscall return us socket we expect.
...
One check is commented by default to not hurt performance.
2014-11-03 00:40:52 +02:00
Paul Sokolovsky
610aa65cef
uasyncio: Add StreamReader.close() method.
2014-10-29 00:55:10 +02:00