我正在使用Tornado实现带有Web套接字的服务器。我有一些多核CPU,我还想使用其他CPU。所以我想用python
multiprocess
模块。我要接受主进程上的连接,并使用其他进程发送数据。我的问题是:
-
是否可以在进程之间共享套接字信息?
-
最好用一下吗
pickling
或者有其他方法可以使用吗?
-
如果我使用
酸洗
它创建的额外的重复文件描述符将影响操作系统可以处理的文件描述符的数量,或者它是进程之间共享的相同文件描述符?
说明:
会有很多传入的连接,并且会有很多来自客户端的消息,所以我不希望主事件循环在发送数据时被卡住。这就是为什么我尝试使用不同的进程将数据发送到连接。
Strace输出
我已经开始了
strace
并给出了从中向Web套接字发送数据的进程ID。的输出
斯特雷斯
如下所示:
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
91.01 0.019570 0 441736 sendto
3.60 0.000774 0 29314 read
3.14 0.000675 0 30623 clock_gettime
1.15 0.000248 0 2909 write
0.96 0.000206 0 11855 epoll_wait
0.13 0.000029 0 1534 680 recvfrom
0.00 0.000000 0 17 open
0.00 0.000000 0 34 close
0.00 0.000000 0 17 stat
0.00 0.000000 0 17 fstat
0.00 0.000000 0 34 poll
0.00 0.000000 0 39 mmap
0.00 0.000000 0 26 munmap
0.00 0.000000 0 408 brk
0.00 0.000000 0 134 ioctl
0.00 0.000000 0 34 socket
0.00 0.000000 0 34 17 connect
0.00 0.000000 0 300 setsockopt
0.00 0.000000 0 17 getsockopt
0.00 0.000000 0 200 fcntl
0.00 0.000000 0 17 gettimeofday
0.00 0.000000 0 1185 epoll_ctl
0.00 0.000000 0 178 78 accept4
------ ----------- ----------- --------- --------- ----------------
100.00 0.021502 520662 775 total
我犯错误有什么原因吗
recvfrom
和
connect
?