吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1034|回复: 3
收起左侧

[求助] python协作式运行没有效果

[复制链接]
Rain丶浅笑 发表于 2020-3-1 00:50
按照模板嵌套多进程,结果发现速度并没有显著提升!
是我哪里写错了,还是这个多进程只支持爬虫呢?
[Python] 纯文本查看 复制代码
#! /usr/bin/env python3
#coding:utf-8
from gevent import monkey
#从gevent库里导入monkey模块。
monkey.patch_all()
#monkey.patch_all()能把程序变成协作式运行,就是可以帮助程序实现异步。
import gevent,time
#导入gevent、time、requests
from gevent.queue import Queue
#从gevent库里导入queue模块
start = time.time()
import re

keywords_filename = u'过滤词库.txt'

input_filename = u'待过滤.txt'

output_filename = u'过滤完成关键词.txt'


def to_be_filtered(word,keywords):
    '''
    is_filtered是否需要过滤掉,默认为不过滤
    '''
    is_filtered = False
    for keyword in keywords:
        if re.findall('^\s*$',keyword):
            continue
        if word.find(keyword)!=-1:
            '''
            如果标题中发现含有keyword,则过滤掉,并break.
            '''
            is_filtered = True
            break
    return is_filtered,keyword

def is_this_english(word):
    '''
    如果一个word中只包含
    '''
    if re.findall('[a-zA-Z]{2,}',word,re.I):
        return True
    else:
        return False

def crawler():
    while not work.empty():
        word = work.get_nowait()
        '''
        查询要过滤的关键词是否在关键词列表中,如果不在关键词列表中,则添加到输出文件中。
        '''
        b,k = to_be_filtered(word,keywords)
        if not is_this_english(word):
            '''
            如果这是一个英文字则不加入其中。
            '''
            if (not b):
                '''
                使用关键词进行过滤,如果不包含关键词,则加入结果中...
                '''
                keywords_filtered.append(word)
            else:
                print(word,'=> 在关键词中,因此过滤掉,关键词为:',k)
        else:
            print(word,'=> 不在关键词中,因为是英文单词')


if __name__=='__main__':
    #将过滤词库读取到keywords中。
    f = open(keywords_filename,'r',encoding='utf-8')
    keywords = [line.strip() for line in f.readlines()]
    f.close()

    print('关键词个数:',len(keywords))

    #读取待过滤的词库
    f = open(input_filename,'r',encoding='utf-8')
    words_to_filter = [line.strip() for line in f.readlines()]
    f.close()
    print('待过滤的标题个数:',len(words_to_filter))
    print('请耐心等待....')
    work = Queue()
    #创建队列对象,并赋值给work。
    for url in words_to_filter:
    #遍历url_list
        work.put_nowait(url)
    keywords_filtered = []

    tasks_list  = [ ]
    #创建空的任务列表
    for x in range(100):
    #相当于创建了100个任务
        task = gevent.spawn(crawler)
        #用gevent.spawn()函数创建执行crawler()函数的任务。
        tasks_list.append(task)
        #往任务列表添加任务。
    gevent.joinall(tasks_list)
    #用gevent.joinall方法,执行任务列表里的所有任务。




    #输出到目标文件中...
    print('输出标题个数:',len(keywords_filtered))
    output_text = '\n'.join(keywords_filtered)
    f = open(output_filename,'w',encoding='utf-8')
    f.write(output_text)
    f.close()
    end = time.time()
    print(end-start)
    print('程序运行结束...')

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hatsune_miku 发表于 2020-3-1 01:01
小白建议使用多线程模块,threading
nstar1221 发表于 2020-3-1 09:55
不了解这个模块,不过根据我的经验,多线程提升不明显的话,应该是那个地方发生了阻塞,可以试试协程
 楼主| Rain丶浅笑 发表于 2020-3-1 20:56
nstar1221 发表于 2020-3-1 09:55
不了解这个模块,不过根据我的经验,多线程提升不明显的话,应该是那个地方发生了阻塞,可以试试协程

好的谢谢!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 20:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表