美文网首页Python
python多进程+协程实现并发

python多进程+协程实现并发

作者: 小啊小狼 | 来源:发表于2020-10-16 10:14 被阅读0次

小练习,假设一个队列中有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秒

相关文章

网友评论

    本文标题:python多进程+协程实现并发

    本文链接:https://www.haomeiwen.com/subject/qxgwpktx.html