Python多处理模块do n

2024-09-26 22:12:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用多处理模块编写一个spider

下面是我的python代码:

# -*- coding:utf-8 -*-

import multiprocessing
import requests


class SpiderWorker(object):


    def __init__(self, q):
        self._q = q

    def run(self):

        def _crawl_item(url):
            requests.get("http://www.baidu.com")
            if respon.ok:
                print respon.url

        while True:
            rst = self._q.get()
            _crawl_item(rst)


def general_worker():

    q = multiprocessing.Queue()

    CPU_COUNT = multiprocessing.cpu_count()

    worker_processes = [
        multiprocessing.Process(target=SpiderWorker(q).run)
        for i in range(CPU_COUNT)
    ]

    map( lambda process: process.start(), worker_processes )

    return q, worker_processes

也许是我的过程错了 每次我运行这个代码,我的进程都会告诉我

^{pr2}$

希望你喜欢


Tags: run代码importselfurlgetdefitem
1条回答
网友
1楼 · 发布于 2024-09-26 22:12:29

这里的主要问题是您没有任何关于流程失败的信息。它可能是gevent,但也可能是其他的东西。因此,了解进程终止的实际原因是在执行其他操作之前的第一步。在

你需要的是^{}

class SpiderWorker(object):
    # ...
    def run(self):
        logger = multiprocessing.log_to_stderr()
        logger.setLevel(multiprocessing.SUBDEBUG)
        try:
            # Here goes your original run() code
        except Exception:
            logger.exception('whoopsie')

此代码的作用:

  1. 创建一个特殊的记录器,它将把它的信息传输到主进程并将其转储到stderr(默认情况下是控制台)。在
  2. 配置此记录器以报告所有内容,包括一些内部multiprocessing模块事件(以防万一您可能不需要它们)。在
  3. 将整个代码包装在catch all语句中,这样无论发生什么情况都无法逃脱您的注意。在
  4. 在logger上运行.exception()方法,它不仅记录消息(这是毫无意义的,因为我们不知道实际发生了什么),而且最重要的是记录整个错误回溯—这是我们实际需要的。在

相关问题 更多 >

    热门问题