Python 多进程+协程的问题

2018 年 8 月 22 日
 bfpiaoran

最近在研究子域名爆破 试用了 dnspython 这个第三方库
但是踩到了很多坑,程序算是能跑起来了,但是感觉速度不是十分理想

因为要做扫描的列表 于是使用了 multiprocessing.Manager 来管理进程之间的共享数据

但是 gevent 如果打了猴子补丁的话会有冲突,于是代码改成 monkey.patch_all(thread=False, socket=False, select=False) 但是跑起来速度很慢 那种慢看起来是 dns 查询的慢,想请问有没有什么优化方法啊

4611 次点击
所在节点    Python
11 条回复
lfzyx
2018 年 8 月 22 日
用 asyncio 啊
Trim21
2018 年 8 月 22 日
asyncio aiodns
bfpiaoran
2018 年 8 月 22 日
@Trim21 我试一试
matrace
2018 年 8 月 22 日
你把 socket 设置为 false,就相当于是多进程了
bfpiaoran
2018 年 8 月 22 日
@w9ay 但是 socket True 会有冲突 emm 再仔细研究研究
lolizeppelin
2018 年 8 月 22 日
抄 openstack 的多进城 service 启动部分代码
好好看看怎么写多进程代码的
bfpiaoran
2018 年 8 月 22 日
我去抄一抄
panyanyany
2018 年 8 月 22 日
插句题外话,凡是涉及多进程 /多线程的,我都首先考虑 Golang ……
lieh222
2018 年 8 月 23 日
multiprocessing.Manager 貌似是通过 multiprocessing.pipe 实现的,原理跟 rpc 一样,性能缺失低,不如用 mmap 吧
whoami9894
2018 年 8 月 23 日
这种网络 I/O 为主的,多线程就够用了吧

#9
manager 是本地 server 提供的共享,它可以在子进程间共享;不是通过 pipe,pipe 只能在父子进程间共享
bfpiaoran
2018 年 8 月 23 日
@whoami9894 刚试了下 asyncio 那速度是真的爽啊 。。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/482214

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX