JayChown 2019-04-16 18:10 采纳率: 0%
浏览 2812

pycharm使用multiprocessing多线程时无反应。

1.看视频学习爬虫时用到了多线程,然后自己敲代码运行无反应。复制视频源代码运行也无反应
附上源代码

from fake_useragent import UserAgent
import  requests
import re
from multiprocessing import Pool

ua = UserAgent()
headers = {
    'user-agent':ua.random
}

def get_proxy():
    return requests.get("http://127.0.0.1:5010/get/").content

def delete_proxy(proxy):
    requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))

def getHtml(url):
        # ....
        retry_count = 5
        proxy = get_proxy()
        while retry_count > 0:
            try:
                html = requests.get(url,headers=headers,proxies={"http": "http://{}".format(proxy)})
                # 使用代理访问
                html.raise_for_status()
                html.encoding = 'utf-8'
                return html.text
            except :
                retry_count -= 1
        # 出错5次, 删除代理池中代理
        delete_proxy(proxy)
        return None

def parse_html(html):
    pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?<img.*?data-src="(.*?)".*?<p.*?"name"><a.*?href="(.*?)">(.*?)</a>'
                        +'.*?.*?<p class="star">(.*?)</p>.*?"releasetime">'
                         +'(.*?)</p>.*?"integer">(.*?)</i>.*?"fraction">(\d)</i>.*?</dd>',re.S)
    items = re.findall(pattern,html)

    for item in items:
            yield {
                '排名'    :item[0],
                '图片链接':"https://maoyan.com"+item[1],
                "电影链接":'https://maoyan.com'+item[2],
                "电影名称":item[3],
                "演员":item[4].strip()[3:],
                "上映时间":item[5],
                "评分":   item[6]+item[6]
            }
def  main(offset):

    url = "https://maoyan.com/board/4?offset="+str(offset)
    html = getHtml(url)
    for item in parse_html(html):
       print(item)

if __name__ == '__main__':

    pool = Pool()
    print(pool.map(main,[i*10 for i in range(10)]))

使用的是multiprocessing 中的Pool模块
程序运行后,一直卡在这个界面。图片说明
程序不报错不退出。使用其他方法的多线程例如 apply_async之类的也没有反应。
在任务管理器中能查看到创建的进程
图片说明
求大佬解答!
已经困惑很久了。

  • 写回答

2条回答 默认 最新

  • 放风喽 2019-04-17 12:21
    关注

    我也是新手,建议你在每个函数的开始和结束位置上,加一个print"**开始"“**结束”,这样你就知道停在什么地方了

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名