Python 如何在一个 web 应用导入的类中设置一个重复执行的进程?

2018-03-20 18:47:31 +08:00
 pompeii

目前情况:

  1. 我在新浪 sae 上使用 web.py 部署了一个微信后台。

  2. 我自己写了一个类(非主函数类),主要是提供数据爬取功能,为了避免模拟登录后 cookie 失效,所以在初始化的时候启动了一个定时访问某个页面的 thread,同时 thread.setDaemon(True)。

  3. 现在我想把这个类导入到主函数(也是一个类)中使用,但是因为这个进程的原因,整个应用启动失败(不启动这个进程就能启动应用)。

问题:

  1. 如何才能实现我想要的效果?即在该进程启动的情况下使用这个类。

  2. 能说说问题的原因?

  3. 忽略这个问题来看,实例化这个类应该在主函数内部还是外部?有何区别?

链接:

  1. 这是我写的简略代码,应该能还原这个问题,其中 WeiXinInterface 代表主函数,Crawler 代表爬虫:https://github.com/TMGT/Problem/tree/master/webpy1803

PS:

  1. 突然想到,是不是可以把这两个类直接合并?(虽然有点蠢)
1079 次点击
所在节点    问与答
8 条回复
pompeii
2018-03-20 18:51:08 +08:00
发现字可能有点多
SuT2i
2018-03-20 18:59:29 +08:00
跟楼主遇到了同样的问题 主程序是 socket client,需要调用不同的模块中的函数并传入 data,调用的函数还是循环体,每隔一段时间需要发送数据到服务端。现在想到的办法就是不同模块都开个线程,将 socket 对象和 data 一起放进线程,但是一直进不去线程。
pompeii
2018-03-20 19:31:33 +08:00
没有 python 大佬指点一二嘛
ycz0926
2018-03-20 19:55:16 +08:00
lz 一会进程,一会线程的,描述清楚点吧
pompeii
2018-03-20 20:09:57 +08:00
@ycz0926 多谢提醒
ycz0926
2018-03-20 20:13:26 +08:00
闲的蛋疼,下了你的代码跑了下,没看到什么问题,唯一的问题就是,主进程跑完了,创建的线程当然也 over 了
ycz0926
2018-03-20 20:15:27 +08:00
this_thread.start()
this_thread.join()
这样就可以了
ycz0926
2018-03-20 20:20:21 +08:00
主要是你设置了 this_thread.setDaemon(True)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/439819

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX