python多进程和协程怎么正确使用

发布于 2022-09-05 07:44:37 字数 489 浏览 22 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

我还不会笑 2022-09-12 07:44:37

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

ゝ偶尔ゞ 2022-09-12 07:44:37

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

一个人的旅程 2022-09-12 07:44:37

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

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

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

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

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

ˉ厌 2022-09-12 07:44:37

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

taskes=[gevent.spawn(get_url,i) for i in range(10)]
gevent.joinall(taskes)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文