python多进程和协程怎么正确使用
import requests,gevent,gevent.monkey
from multiprocessing import Pool
gevent.monkey.patch_socket()
url="http://www.xxx.cn"#替换了URL
def get_url(i):
print (i,requests.get(url).text[0:6])
taskes=[gevent.spawn(get_url,i) for i in range(10)]
def g():
gevent.joinall(taskes)
def run():
p=Pool(8)
for i in range(16):
p.apply_async(g,args=())
p.close()
p.join()
if __name__=="__main__":
run()
这段代码哪儿有问题?为什么把进程池16改成32,结果的输出数量仍然一样?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不清楚你的真实意图,为了等待gevents退出只要直接调用g()就可以了。
看你的代码,进程池中的进程所做的事情就是等待gevent退出,不管你用多少个进程执行效果都是一样的。
建议应该再去详细了解一下,进程、线程、协程
不要把自己不了解的东西都凑一块
协程是
协作式线程
的简称,协程之间通过一定的协议交替占用cpu时间来获得执行权。我们一般说的线程是
抢占式线程
,由操作系统来分配执行权。进程
是 线程的容器,是操作系统用来管理线程的,实际干事的是线程。多个协程只能在一个单线程里协作运行。
只是join协程的时候出错了,有这么严重吗
def g():