python协程实现一万并发_python多进程+协程实现并发

小练习,假设一个队列中有100000个URL地址,每个请求需要1秒钟,尝试用4个进程,每个进程中开启1000个协程去请求!统计运行时间

from gevent import monkey

monkey.patch_all(thread=False)

import gevent

import time

from multiprocessing import Process, Queue

import os

def time_count(func):

def wrapper(*args, **kwargs):

start_time = time.time()

func(*args, **kwargs)

end_time = time.time()

print('总耗时:', end_time - start_time)

return wrapper

class Myprocess(Process):

def __init__(self, que):

super().__init__()

self.que = que

#重写进程子类的run函数

def run(self):

cos = []

#开启多协程

for i in range(1000):

#调用工作函数

cor = gevent.spawn(self.work)

cos.append(cor)

gevent.joinall(cos)

#定义工作函数

def work(self):

while self.que.qsize() > 0:

try:

url = self.que.get(timeout=1)

time.sleep(1)

print(f"{os.getpid()}正在请求url:{url}")

except Exception as e:

print(e.__repr__())

break

@time_count

def main():

q = Queue()

for i in range(100000):

q.put(f'https://www.baidu.com--{i}')

process_list = []

for i in range(4):

p = Myprocess(q)

process_list.append(p)

p.start()

for p in process_list:

p.join()

print("任务结束")

if __name__ == '__main__':

main()

运行时间27秒

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值