This is different from the asyncio module and causes troubles with at least dup() based FDs. Namely serving static files with aiohttp under uvloop will induce a 100% CPU loop inside libuv because it can't remove the FD. Strace attached..
18:25:45.050832 open("/home/mayfield/project/aiocluster/aiocluster/diag/ui/node_modules/semantic-ui-css/semantic.css", O_RDONLY|O_CLOEXEC) = 24 <0.000031>
18:25:45.050911 ioctl(24, FIOCLEX) = 0 <0.000018>
18:25:45.050970 fstat(24, {st_mode=S_IFREG|0775, st_size=752358, ...}) = 0 <0.000019>
18:25:45.051036 ioctl(24, TCGETS, 0x7ffd90f38cb0) = -1 ENOTTY (Inappropriate ioctl for device) <0.000019>
18:25:45.051104 lseek(24, 0, SEEK_CUR) = 0 <0.000020>
18:25:45.051853 fcntl(23, F_DUPFD_CLOEXEC, 0) = 25 <0.000024>
18:25:45.051972 ioctl(25, FIONBIO, [0]) = 0 <0.000018>
18:25:45.052067 write(1, "\nCREATED", 8) = 8 <0.000039>
18:25:45.052225 getsockname(25, {sa_family=AF_INET, sin_port=htons(7878), sin_addr=inet_addr("192.168.17.147")}, [16]) = 0 <0.000023>
18:25:45.052336 getpeername(25, {sa_family=AF_INET, sin_port=htons(50857), sin_addr=inet_addr("192.168.17.179")}, [16]) = 0 <0.000022>
18:25:45.052443 write(1, " 25 <socket.socket fd=25, family"..., 159) = 159 <0.000026>
18:25:45.052521 ioctl(25, FIONBIO, [1]) = 0 <0.000017>
18:25:45.052603 sendto(25, "HTTP/1.1 200 OK\r\nContent-Type: t"..., 184, 0, NULL, 0) = 184 <0.000068>
18:25:45.052777 sendfile(25, 24, [0] => [143352], 752358) = 143352 <0.000083>
18:25:45.052970 getsockname(25, {sa_family=AF_INET, sin_port=htons(7878), sin_addr=inet_addr("192.168.17.147")}, [16]) = 0 <0.000019>
18:25:45.053048 getpeername(25, {sa_family=AF_INET, sin_port=htons(50857), sin_addr=inet_addr("192.168.17.179")}, [16]) = 0 <0.000017>
18:25:45.053131 write(1, "ADD 25 <socket.socket fd=25, fam"..., 144) = 144 <0.000024>
18:25:45.053228 epoll_ctl(6, EPOLL_CTL_ADD, 25, {EPOLLIN, {u32=4294967295, u64=18446744073709551615}}) = 0 <0.000021>
18:25:45.053289 epoll_ctl(6, EPOLL_CTL_DEL, 25, 0x7ffd90f38db0) = 0 <0.000048>
18:25:45.053384 ioctl(25, FIONBIO, [1]) = 0 <0.000021>
18:25:45.053499 epoll_ctl(6, EPOLL_CTL_ADD, 25, {EPOLLOUT, {u32=25, u64=25}}) = 0 <0.000022>
18:25:45.053584 epoll_wait(6, [], 1024, 0) = 0 <0.000019>
18:25:45.053651 epoll_wait(6, [{EPOLLOUT, {u32=25, u64=25}}], 1024, 43) = 1 <0.015515>
18:25:45.069554 getsockname(25, {sa_family=AF_INET, sin_port=htons(7878), sin_addr=inet_addr("192.168.17.147")}, [16]) = 0 <0.000181>
18:25:45.070023 getpeername(25, {sa_family=AF_INET, sin_port=htons(50857), sin_addr=inet_addr("192.168.17.179")}, [16]) = 0 <0.000158>
18:25:45.070464 write(1, "REMOVE! 25 <socket.socket fd=25,"..., 148) = 148 <0.000069>
18:25:45.070709 sendfile(25, 24, [143352] => [273672], 609006) = 130320 <0.000131>
18:25:45.071063 getsockname(25, {sa_family=AF_INET, sin_port=htons(7878), sin_addr=inet_addr("192.168.17.147")}, [16]) = 0 <0.000026>
18:25:45.071258 getpeername(25, {sa_family=AF_INET, sin_port=htons(50857), sin_addr=inet_addr("192.168.17.179")}, [16]) = 0 <0.000113>
18:25:45.071623 write(1, "ADD 25 <socket.socket fd=25, fam"..., 144) = 144 <0.000179>
18:25:45.071947 epoll_ctl(6, EPOLL_CTL_ADD, 25, {EPOLLIN, {u32=4294967295, u64=18446744073709551615}}) = -1 EEXIST (File exists) <0.000065>
18:25:45.072065 epoll_ctl(6, EPOLL_CTL_DEL, 25, 0x7ffd90f368d0) = 0 <0.000031>
18:25:45.072139 ioctl(25, FIONBIO, [1]) = 0 <0.000018>
18:25:45.072225 epoll_ctl(6, EPOLL_CTL_ADD, 25, {EPOLLOUT, {u32=25, u64=25}}) = 0 <0.000022>
18:25:45.072302 epoll_wait(6, [], 1024, 24) = 0 <0.024234>
18:25:45.097030 epoll_wait(6, [], 1024, 0) = 0 <0.000166>
18:25:45.097609 epoll_ctl(6, EPOLL_CTL_ADD, 15, {EPOLLIN, {u32=4294967295, u64=18446744073709551615}}) = -1 EEXIST (File exists) <0.000145>
18:25:45.098014 epoll_ctl(6, EPOLL_CTL_DEL, 15, 0x7ffd90f39590) = 0 <0.000049>
18:25:45.098193 ioctl(15, FIONBIO, [1]) = 0 <0.000030>
18:25:45.098361 epoll_ctl(6, EPOLL_CTL_ADD, 15, {EPOLLIN, {u32=15, u64=15}}) = 0 <0.000085>
18:25:45.098540 epoll_wait(6, [], 1024, 0) = 0 <0.000018>
18:25:45.098630 epoll_wait(6, [{EPOLLOUT, {u32=25, u64=25}}], 1024, 99) = 1 <0.004728>
18:25:45.103551 getsockname(25, {sa_family=AF_INET, sin_port=htons(7878), sin_addr=inet_addr("192.168.17.147")}, [16]) = 0 <0.000026>
18:25:45.103711 getpeername(25, {sa_family=AF_INET, sin_port=htons(50857), sin_addr=inet_addr("192.168.17.179")}, [16]) = 0 <0.000022>
18:25:45.103850 write(1, "REMOVE! 25 <socket.socket fd=25,"..., 148) = 148 <0.000039>
18:25:45.103979 sendfile(25, 24, [273672] => [403992], 478686) = 130320 <0.000060>
18:25:45.104165 getsockname(25, {sa_family=AF_INET, sin_port=htons(7878), sin_addr=inet_addr("192.168.17.147")}, [16]) = 0 <0.000018>
18:25:45.104260 getpeername(25, {sa_family=AF_INET, sin_port=htons(50857), sin_addr=inet_addr("192.168.17.179")}, [16]) = 0 <0.000019>
18:25:45.104367 write(1, "ADD 25 <socket.socket fd=25, fam"..., 144) = 144 <0.000026>
18:25:45.104473 epoll_ctl(6, EPOLL_CTL_ADD, 25, {EPOLLIN, {u32=4294967295, u64=18446744073709551615}}) = -1 EEXIST (File exists) <0.000017>
18:25:45.104541 epoll_ctl(6, EPOLL_CTL_DEL, 25, 0x7ffd90f368d0) = 0 <0.000023>
18:25:45.104601 ioctl(25, FIONBIO, [1]) = 0 <0.000016>
18:25:45.104678 epoll_ctl(6, EPOLL_CTL_ADD, 25, {EPOLLOUT, {u32=25, u64=25}}) = 0 <0.000022>
18:25:45.104769 epoll_wait(6, [{EPOLLOUT, {u32=25, u64=25}}], 1024, 93) = 1 <0.057713>
18:25:45.162769 getsockname(25, {sa_family=AF_INET, sin_port=htons(7878), sin_addr=inet_addr("192.168.17.147")}, [16]) = 0 <0.000030>
18:25:45.162926 getpeername(25, {sa_family=AF_INET, sin_port=htons(50857), sin_addr=inet_addr("192.168.17.179")}, [16]) = 0 <0.000026>
18:25:45.163065 write(1, "REMOVE! 25 <socket.socket fd=25,"..., 148) = 148 <0.000036>
18:25:45.163203 sendfile(25, 24, [403992] => [534312], 348366) = 130320 <0.000060>
18:25:45.163391 getsockname(25, {sa_family=AF_INET, sin_port=htons(7878), sin_addr=inet_addr("192.168.17.147")}, [16]) = 0 <0.000017>
18:25:45.163484 getpeername(25, {sa_family=AF_INET, sin_port=htons(50857), sin_addr=inet_addr("192.168.17.179")}, [16]) = 0 <0.000017>
18:25:45.163583 write(1, "ADD 25 <socket.socket fd=25, fam"..., 144) = 144 <0.000025>
18:25:45.163711 epoll_ctl(6, EPOLL_CTL_ADD, 25, {EPOLLIN, {u32=4294967295, u64=18446744073709551615}}) = -1 EEXIST (File exists) <0.000021>
18:25:45.163792 epoll_ctl(6, EPOLL_CTL_DEL, 25, 0x7ffd90f368d0) = 0 <0.000019>
18:25:45.163850 ioctl(25, FIONBIO, [1]) = 0 <0.000016>
18:25:45.163927 epoll_ctl(6, EPOLL_CTL_ADD, 25, {EPOLLOUT, {u32=25, u64=25}}) = 0 <0.000020>
18:25:45.163989 epoll_wait(6, [{EPOLLOUT, {u32=25, u64=25}}], 1024, 33) = 1 <0.017369>
18:25:45.181732 getsockname(25, {sa_family=AF_INET, sin_port=htons(7878), sin_addr=inet_addr("192.168.17.147")}, [16]) = 0 <0.000050>
18:25:45.181960 getpeername(25, {sa_family=AF_INET, sin_port=htons(50857), sin_addr=inet_addr("192.168.17.179")}, [16]) = 0 <0.000026>
18:25:45.182252 write(1, "REMOVE! 25 <socket.socket fd=25,"..., 148) = 148 <0.000049>
18:25:45.182423 sendfile(25, 24, [534312] => [664632], 218046) = 130320 <0.000133>
18:25:45.182797 getsockname(25, {sa_family=AF_INET, sin_port=htons(7878), sin_addr=inet_addr("192.168.17.147")}, [16]) = 0 <0.000027>
18:25:45.183088 getpeername(25, {sa_family=AF_INET, sin_port=htons(50857), sin_addr=inet_addr("192.168.17.179")}, [16]) = 0 <0.000164>
18:25:45.183530 write(1, "ADD 25 <socket.socket fd=25, fam"..., 144) = 144 <0.000143>
18:25:45.183813 epoll_ctl(6, EPOLL_CTL_ADD, 25, {EPOLLIN, {u32=4294967295, u64=18446744073709551615}}) = -1 EEXIST (File exists) <0.000022>
18:25:45.183929 epoll_ctl(6, EPOLL_CTL_DEL, 25, 0x7ffd90f368d0) = 0 <0.000167>
18:25:45.184256 ioctl(25, FIONBIO, [1]) = 0 <0.000048>
18:25:45.184526 epoll_ctl(6, EPOLL_CTL_ADD, 25, {EPOLLOUT, {u32=25, u64=25}}) = 0 <0.000142>
18:25:45.184805 epoll_wait(6, [{EPOLLOUT, {u32=25, u64=25}}], 1024, 13) = 1 <0.012150>
18:25:45.197446 getsockname(25, {sa_family=AF_INET, sin_port=htons(7878), sin_addr=inet_addr("192.168.17.147")}, [16]) = 0 <0.000051>
18:25:45.197749 getpeername(25, {sa_family=AF_INET, sin_port=htons(50857), sin_addr=inet_addr("192.168.17.179")}, [16]) = 0 <0.000114>
18:25:45.198159 write(1, "REMOVE! 25 <socket.socket fd=25,"..., 148) = 148 <0.000166>
18:25:45.198559 sendfile(25, 24, [664632] => [752358], 87726) = 87726 <0.000114>
18:25:45.198925 getsockname(25, {sa_family=AF_INET, sin_port=htons(7878), sin_addr=inet_addr("192.168.17.147")}, [16]) = 0 <0.000020>
18:25:45.199062 getpeername(25, {sa_family=AF_INET, sin_port=htons(50857), sin_addr=inet_addr("192.168.17.179")}, [16]) = 0 <0.000026>
18:25:45.199239 write(1, "CLOSE 25 <socket.socket fd=25, f"..., 146) = 146 <0.000049>
18:25:45.199385 write(1, "\n", 1) = 1 <0.000025>
18:25:45.199494 close(25) = 0 <0.000021>
18:25:45.199595 close(24) = 0 <0.000024>
18:25:45.200256 stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=2403, ...}) = 0 <0.000032>
18:25:45.200889 write(2, "[\33[34m2016-11-19 18:25:45,200\33[0"..., 333) = 333 <0.000031>
18:25:45.201266 epoll_wait(6, [], 1024, 0) = 0 <0.000036>
18:25:45.201492 epoll_ctl(6, EPOLL_CTL_ADD, 15, {EPOLLIN, {u32=4294967295, u64=18446744073709551615}}) = -1 EEXIST (File exists) <0.000025>
18:25:45.201601 epoll_ctl(6, EPOLL_CTL_DEL, 15, 0x7ffd90f39590) = 0 <0.000036>
18:25:45.201713 ioctl(15, FIONBIO, [1]) = 0 <0.000026>
18:25:45.201844 epoll_ctl(6, EPOLL_CTL_ADD, 15, {EPOLLIN, {u32=15, u64=15}}) = 0 <0.000026>
18:25:45.201949 epoll_wait(6, [], 1024, 0) = 0 <0.000018>
18:25:45.202011 epoll_wait(6, [{EPOLLOUT, {u32=25, u64=25}}], 1024, 81) = 1 <0.008192>
18:25:45.210303 epoll_ctl(6, EPOLL_CTL_DEL, 25, 0x7ffd90f37060) = -1 EBADF (Bad file descriptor) <0.000101>
18:25:45.210532 epoll_wait(6, [{EPOLLOUT, {u32=25, u64=25}}], 1024, 72) = 1 <0.000178>
18:25:45.210950 epoll_ctl(6, EPOLL_CTL_DEL, 25, 0x7ffd90f37060) = -1 EBADF (Bad file descriptor) <0.000159>
18:25:45.211247 epoll_wait(6, [{EPOLLOUT, {u32=25, u64=25}}], 1024, 63) = 1 <0.000064>
18:25:45.211420 epoll_ctl(6, EPOLL_CTL_DEL, 25, 0x7ffd90f37060) = -1 EBADF (Bad file descriptor) <0.000045>
18:25:45.211531 epoll_wait(6, [{EPOLLOUT, {u32=25, u64=25}}], 1024, 54) = 1 <0.000048>
18:25:45.211620 epoll_ctl(6, EPOLL_CTL_DEL, 25, 0x7ffd90f37060) = -1 EBADF (Bad file descriptor) <0.000018>
18:25:45.211675 epoll_wait(6, [{EPOLLOUT, {u32=25, u64=25}}], 1024, 45) = 1 <0.000022>
I could go into more detail about this but it's rather complex and I believe there are a number of issues you could tie back to the fact that remove_* isn't syncronous as it is with the stdlib implementation of EventLoop.