【问题标题】:Running a python subprocess in Flask在 Flask 中运行 python 子进程
【发布时间】:2018-02-03 20:05:31
【问题描述】:

我有一个 Flask 网络应用程序以这种方式运行爬取过程:

在终端标签 1 上:

$ cd /path/to/scraping
$ scrapyrt 

http://scrapyrt.readthedocs.io/en/latest/index.html

在终端标签 2 上:

$ python app.pp 

app.py

params = {
          'spider_name': spider,
          'start_requests':True
          }

        response = requests.get('http://localhost:9080/crawl.json', params)
        print ('RESPONSE',response)
        data = json.loads(response.text)

哪个有效。


现在我想将所有内容移至app.py,为此我已经尝试过:

        import subprocess
        from time import sleep

        try:
            subprocess.check_output("scrapyrt", shell=True, cwd='path/to/scraping')
        except subprocess.CalledProcessError as e:
            raise RuntimeError("command '{}' return with error (code {}): {}".format(e.cmd, e.returncode, e.output))

        sleep(3)

params = {
          'spider_name': spider,
          'start_requests':True
           }

        response = requests.get('http://localhost:9080/crawl.json', params)
        print ('RESPONSE',response)
        data = json.loads(response.text)

这开始扭曲,像这样:

2018-02-03 17:29:35-0200 [-] Log opened.
2018-02-03 17:29:35-0200 [-] Site starting on 9080
2018-02-03 17:29:35-0200 [-] Starting factory <twisted.web.server.Site instance at 0x104effa70>

但是爬取过程挂起并且没有通过。

我在这里错过了什么?

【问题讨论】:

    标签: flask scrapy subprocess


    【解决方案1】:

    您是否考虑过使用调度程序,例如 APScheduler 或类似的? 您可以使用 crons 或间隔运行代码,它与 Flask 很好地集成。

    看这里: http://apscheduler.readthedocs.io/en/stable/userguide.html

    这是一个例子:

    from flask import Flask
    from apscheduler.schedulers.background import BackgroundScheduler
    
    app = Flask(__name__)
    cron = BackgroundScheduler()
    cron.start()
    
    @app.route('/')
    def index():
        return render_template("index.html")
    
    @cron.scheduled_job('interval', minutes=3)
    def my_scrapper():
        # Do the stuff you need
        return True
    

    【讨论】:

    • 您能说得更具体些吗?
    • 所以在“Tab 1”下执行的代码可以进入Flask应用文件的函数。然后,可以将代码设置为使用 APScheduler 以所需的时间间隔执行。只有 Flask 应用程序正在运行,并执行抓取代码。
    猜你喜欢
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2015-10-29
    • 1970-01-01
    • 2021-10-18
    • 2022-01-06
    • 2016-04-06
    相关资源
    最近更新 更多