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,结果的输出数量仍然一样?

阅读 7.5k
4 个回答

不清楚你的真实意图,为了等待gevents退出只要直接调用g()就可以了。
看你的代码,进程池中的进程所做的事情就是等待gevent退出,不管你用多少个进程执行效果都是一样的。

建议应该再去详细了解一下,进程、线程、协程

不要把自己不了解的东西都凑一块

协程是协作式线程的简称,协程之间通过一定的协议交替占用cpu时间来获得执行权。

我们一般说的线程是 抢占式线程,由操作系统来分配执行权。

进程 是 线程的容器,是操作系统用来管理线程的,实际干事的是线程。

多个协程只能在一个单线程里协作运行。

新手上路,请多包涵

只是join协程的时候出错了,有这么严重吗
def g():

taskes=[gevent.spawn(get_url,i) for i in range(10)]
gevent.joinall(taskes)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题