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

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"**开始"“**结束”,这样你就知道停在什么地方了

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料