在 Google App Engine 上按计划运行 python 脚本

2023-11-22

我正在寻找一个好心人,他可以提供一个非常基本的框架来使用 Google App Engine 运行 python 脚本。我已阅读文档,检查相关的 SO 问题,但我对 WebApp 格式迷失了。我想做的就是每周运行 6 次接受参数的 python 脚本或多个 python 脚本,以监听网站中的更改,然后将它们发布到 Firestore。

我了解 cron 格式和大部分配置文件。我一直困惑于如何安排项目的文件以及 url 的工作原理。

我所要求的只是一个关于如何有效运行 python 脚本的非常基本的示例。This是迄今为止我找到的最好的资源,但我无法真正理解该网站上的这段代码是怎么回事:

`#!/usr/bin/python
# -*- coding: utf-8 -*- 
from __future__ import unicode_literals   
from google.appengine.ext import webapp 
from google.appengine.ext.webapp.util import run_wsgi_app 
from google.appengine.ext import db   
import feedparser  
import time   

class Item(db.Model): 
    title = db.StringProperty(required=False)
    link = db.StringProperty(required=False)
    date = db.StringProperty(required=False)   class Scrawler(webapp.RequestHandler):
    
    def get(self):
        self.read_feed()      
        self.response.out.write(self.print_items())
        
    def read_feed(self):
        
        feeds = feedparser.parse( "http://www.techrepublic.com/search?t=14&o=1&mode=rss" )
        
        for feed in feeds[ "items" ]:
            query = Item.gql("WHERE link = :1", feed[ "link" ])
            if(query.count() == 0):
                item = Item()
                item.title = feed[ "title" ]
                item.link = feed[ "link" ]
                item.date = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.time()))
                item.put()
    
    def print_items(self):
        s = "All items:<br>"
        for item in Item.all():
            s += item.date + " - <a href='" + item.link + "'>" + item.title + "</a><br>"
        return s   application = webapp.WSGIApplication([('/', Scrawler)], debug=True)   def main():
    run_wsgi_app(application)   if __name__ == "__main__":
    main() `

这是我尝试运行的 python 脚本,仅用于测试,使用 python3.7:

import sys
from datetime import datetime

import firebase_admin
from firebase_admin import firestore

app = firebase_admin.initialize_app()
db = firestore.client()


def hello_firestore(user_name):
    db.collection('firestore_test').document('test').set({
        'time': str(datetime.now()),
        'user_name': user_name
    })


if __name__ == "__main__":
    try:
        user_name = sys.argv[1]
    except:
        print('Error with the argument', file=sys.stderr)
    try:
        hello_firestore(user_name)
    except:
        print('Error accessing the database', file=sys.stderr)
        sys.exit(0)

据我了解,我必须使用 Flask 或类似的东西才能使其工作,但我真的不明白它是如何工作的,我所要求的只是一个小样本和简短的解释,从那里我将添加两个和两个。

此致


最后我的孩子们会再次爱我。 事实证明,我正在查看错误的 GCP 资源,正如 @Dan_Cornilescu 指出的那样,这可能是一种方法,但最简单的方法是“云函数”与“云调度程序”结合使用,我发现它只是通过只是机会。

This文章是第一篇提到它的文章,目前我放弃了它,因为作者再次使用网络应用程序来说明这个案例,出于我的需要和缺乏技术术语,我只是无法挖掘它。 但它确实像预期的那样简单,在您的 Google Cloud Console 中:

  1. 转到功能部分
  2. 选择“Cloud Pub/Sub”作为触发器
  3. 添加/选择主题
  4. 选择你的运行时(当然是Python3.7)
  5. 选择要执行的函数
  6. Create
  7. 确保填写下一个选项卡上的“requirements.txt”文件
  8. 转到 GCP 的 Cloud Scheduler 部分并创建作业(cron 作业)
  9. 选择作为目标:“Pub/Sub”
  10. 输入您为您的职能选择的主题
  11. 如果您想发送函数的参数,请使用有效负载 为了这个目的。

要为 Python 函数使用一个或多个参数,您需要使用有效负载并使用其初始函数中的以下内容:

pubsub_message = base64.b64decode(event['data']).decode('utf-8')

This pubsub_message您可以将它用作 python 函数的参数。

这就是所有的人,简单,超级简单,最后我认为这与没有可视化页面的 GAE 是一样的,正是我所需要的,我知道一定有更好的方法。

编辑:我在这里提到的文章描述了如何使用 gcloud 直接从计算机上传函数。

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Google App Engine 上按计划运行 python 脚本 的相关文章

随机推荐

  • 在 scalatest 中用什么代替符号?

    在 scalatest 中 您应该能够使用如下符号测试布尔属性 iter shouldBe traversableAgain 但这种表示法在最新版本的 scala 中已被弃用 所以现在你应该这样写 iter shouldBe Symbol
  • 对硬盘中的大量整数进行排序

    给定硬盘上 100 GB 整数数据 RAM 为 2 GB 如何以最少的磁盘操作对整数进行排序 这里从磁盘获取一个数字被视为一次磁盘操作 尽管实际上可以获取一块数据 我们可以使用磁盘上的额外空间进行临时存储 而不需要考虑清理已使用的临时空间的
  • Hibernate 显示真实的 SQL [重复]

    这个问题在这里已经有答案了 if I set
  • 如何配置 MVC6 应用程序以在 IIS 上运行?

    因此 我正在 Visual Studio 2015 中构建一个 MVC6 应用程序 并已设法解决大部分问题 但是 我尚未解决部署问题 在 MVC4 我之前使用的 中 我们的流程 发布到一个文件夹 然后在 IIS 中设置网站 右键单击Site
  • 在 python 中模拟传值行为

    我想模拟 python 中的按值传递行为 换句话说 我想绝对确保我编写的函数不会修改用户提供的数据 一种可能的方法是使用深复制 from copy import deepcopy def f data data deepcopy data
  • 线性布局和相对布局有什么区别?

    线性布局和相对布局有什么区别 LINEAR LAYOUT 在线性布局中 顾名思义 所有元素都是 以线性方式显示 水平或垂直 此行为设置为 android orientation 这是节点的一个属性 线性布局 线性布局将每个子元素一个接一个地
  • 如何在Python中使用react.js和Selenium从网页中抓取数据?

    我在抓取使用的网站时遇到一些困难react js并且不知道为什么会发生这种情况 This is the html of the website 我想做的是点击带有class play pause button btn btn naked 但
  • Wordpress 中的永久链接 - 找不到页面

    我已经搜索了几个小时 但没有找到任何似乎能够解决这个问题的东西 这是场景 我正在制作一个基于 二十一 主题的wp主题 一切都很顺利 直到我决定将网址更改为永久链接 唯一显示的页面是我之前定义的静态页面 我已经设置了 htaccess 文件
  • 关于 chomp 的澄清

    我现在正在放课 决定花时间学习 Perl 我正在使用 Beginning Perl http www perl org books beginning perl 我正在完成第三章末尾的练习 其中一项练习要求我 将重要的电话号码存储在哈希中
  • 如何使用 FontForge 从字体中删除连字

    我的字体有一些连字错误 这导致了问题我的安卓应用程序 我只想删除连字 我该如何在 FontForge 中做到这一点 这个问题是相关的 但它是相反的 Fontforge 脚本如何为字形添加连字 In 字体锻造 go to 元素 gt 字体信息
  • C# 中的图像调整大小 - 确定调整尺寸(高度和宽度)的算法

    我需要缩小高度或宽度大于预定义像素值的图像 我编写了一些代码来查看原始图像 检查宽度 高度或高度和宽度是否大于最大宽度 最大高度设置 我现在需要根据后一个值的最大值找出要调整大小的尺寸 例如 如果图像是900h x 300w最大高度是700
  • JavaScript 数字自相等[重复]

    这个问题在这里已经有答案了 我最近遇到了以下代码 function baseClamp number lower upper if number number if upper undefined number number lt uppe
  • Ruby - 优雅地比较两个枚举器

    我有来自 Ruby 1 9 2 中两个不同来源 二进制数据 的两个长数字流 这两个源被封装成两个形式枚举器 我想检查两个流是否完全相等 我提出了几个解决方案 但两者看起来都很不优雅 第一个只是将两者转换为数组 def equal strea
  • iOS 标签不使用 Swift 中的函数更新文本[重复]

    这个问题在这里已经有答案了 这个看似简单的问题让我发疯 我正在使用 SwiftyJSON 来获取远程数据 这是我在 Swift 中的 ViewController 类的片段 override func viewDidLoad super v
  • 如何模拟 Dagger 活动对象图?

    我在 Android 应用程序中使用 Dagger 来提供应用程序和活动范围图 我正在使用 Robolectric 进行单元测试 我知道我可以为 Robolectric 提供一个替代的 Application 类 该类配置有一个应用程序对象
  • 以自定义比例和间距将 ggplots 排列在一起

    我正在尝试将 n 个条形图与底部的一个通用标签图结合起来 我的问题是 grid arrange 将两个图合并为 50 50 我正在寻找类似布局矩阵的东西 您可以在其中指定 4 个插槽 前 3 个插槽由第一个图占用 最后一个插槽由第二个图占用
  • 批量终止进程并报告成功

    我有以下批处理文件 它会终止 iTunes 程序 因此 如果我连接 iPod 它就不会同步它 我知道你可以在 iTunes 中进行设置 echo off kill cls taskkill F IM itunes exe gt nul if
  • 在 Java Bean 中回收 Domino 对象的最佳方法是什么

    我使用一个函数来访问配置文档 private Document lookupDoc String key1 try Session sess ExtLibUtil getCurrentSession Database wDb sess ge
  • 更改 Android Studio 中的主目录默认位置

    我想出了如何更改默认值save通过创建新项目并选择不同的目录来定位 工作空间 之前是 C Users Name AndroidStudioProjects 但现在我更改了默认值save位置到 C Name Android AndroidSt
  • 在 Google App Engine 上按计划运行 python 脚本

    我正在寻找一个好心人 他可以提供一个非常基本的框架来使用 Google App Engine 运行 python 脚本 我已阅读文档 检查相关的 SO 问题 但我对 WebApp 格式迷失了 我想做的就是每周运行 6 次接受参数的 pyth