免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 13329 | 回复: 6
打印 上一主题 下一主题

python多进程multiprocessing模块map_async方法使用的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-22 18:22 |只看该作者 |倒序浏览
官方网站标准库文档里边map_async方法的用法如下:
map_async(func, iterable[, chunksize[, callback]])

这里如果我函数原型如下:
func(argv1)
我要调用map_async的话,很简单:
p.map_async(func, [1,2,3])
函数会一次取出列表的每个元素作为参数来执行func(1), func(2), func(3)

但是如果我函数原型如下:
func(argv1, argv2, argv3)
我要调用map_async的话,怎么办呢,
p.map_async(func, [(1,2,3), (4,5,6)])行不通啊!

论坛徽章:
0
2 [报告]
发表于 2013-05-22 20:48 |只看该作者
回复 1# jack1007

map和map_async只支持1个参数的函数定义,把你的函数定义改一下:

func((argv1, argv2, argv3))
   

论坛徽章:
0
3 [报告]
发表于 2013-06-02 10:01 |只看该作者
我重新修改了函数定义
def init_sock((sev_sock, pool_size)):
    server = SockSelect(sev_sock, 20)
    server.sock_pool(pool_size)

下面调用如下:
result = p.map_async(init_sock, [(server_sock, POOL_SIZE), (server_sock, POOL_SIZE)])
运行后报错:
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/threading.py", line 551, in __bootstrap_inner
    self.run()
  File "/usr/local/lib/python2.7/threading.py", line 504, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 319, in _handle_tasks
    put(task)
TypeError: expected string or Unicode object, NoneType found
这报错完全莫名其妙了。
另外,我单独调用init_sock((server_sock, POOL_SIZE))这样是没问题的,放到map_async里面就出问题了,有没有对map_async函数使用熟悉的朋友,帮忙想想,谢谢!

论坛徽章:
0
4 [报告]
发表于 2013-06-02 16:13 |只看该作者
换go语言来写吧,协程加进程,爽死你

论坛徽章:
0
5 [报告]
发表于 2013-06-02 17:19 |只看该作者
这模块我是不会用了,我直接手动fork俩子进程来并行处理两个select,各1000个连接socket连接。

论坛徽章:
0
6 [报告]
发表于 2013-06-03 11:17 |只看该作者
越来越费解了,map_async里边的函数(如init_sock),无法接受sock对象?我用普通的int对象,就可以,换sock对象就不行。我单独传sock对象给init_sock是可以的,放到map_async里边就不行了,真是无语了

论坛徽章:
0
7 [报告]
发表于 2013-06-05 14:01 |只看该作者
楼主,根据python的multiprocessing里的说明,要传入到map_async里的函数指针,其使用的参数,必须是可以pickle的,所以这个应该就是你的错误所在。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP