python多进程传递参数_急急急, Python 多进程,如何传递 epoll?

10

2019-06-16 15:39:41 +08:00

@NoAnyLove 好的好的,我查了下,说 IPC 或向 worker 参数传递的东西必须要能 pickle,不然就报错,那就是 select.epoll 是不支持的。error:TypeError: can't pickle select.epoll objects。

代码大致如下:

def listenProcess(serverSocket):

process_num = 2*cpu_count()

# 设置进程池、消息队列

po = Pool(process_num)

q = Manager().Queue() #ipc 方法 1

m=Manager() # ipc 方法 2

epoll_fd = select.epoll()

epoll_fd.register(serverSocket.fileno(), select.EPOLLIN)

# 保存中间数据

connections = {}

addresses = {}

while True:

epoll_list = epoll_fd.poll()

for fd, events in epoll_list:

print("fd is:%s events is%s"%(fd,events))

if fd == serverSocket.fileno():

conn, addr = serverSocket.accept()

conn.setblocking(False)

epoll_fd.register(conn.fileno(), select.EPOLLIN | select.EPOLLET )

connections[conn.fileno()] = conn

addresses[conn.fileno()] = addr

elif events & select.EPOLLIN:

# q.put(connections[fd])

po.apply_async(workProcess4In,args=(connections[fd],epoll_fd,))

elif events & select.EPOLLOUT:

# q.put(fd)

# d=m.dict({"epollfd":epoll_fd,"fd":fd})

po.apply_async(workProcess4Out,(connections[fd,epoll_fd],))

po.close()

po.join()

def workProcess4In(conn,epollfd):

#print("epoll is:%s"%epollfd)

#执行读操作,遇到 eagain 就 modify 状态 out

epollfd.modify(conn.fileno(), select.EPOLLET | select.EPOLLOUT)

执行结果:不执行 workProcess4In,如果把 epoll_fd 换成其他,则没问题

请教 dalao,主进程需要如何才能把 epoll_fd 传过去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值